Гимнастика атрибутов файла BASH: как легко получить файл с полными путями и привилегиями? - PullRequest
0 голосов
/ 12 февраля 2010

Уважаемые Мастера Командной Строки,

У меня есть дерево каталогов, для которого я хочу создать файл, содержащий по две записи в строке: полный путь для каждого файла и соответствующие привилегии указанного файла.

Например, одна строка может содержать:

/v1.6.0.24/lib/mylib.jar -r-xr-xr-x

Лучший способ создать левый столбец - это find . Однако из-за того, что ls не может ни читать список имен файлов, ни использовать stdin, похоже, мне приходится прибегать к сценарию, который делает это для меня. ... обременительно.

Я был уверен, что видел, как люди каким-то образом находят команды для каждого найденного файла, но сегодня утром я, должно быть, схожу с ума, так как не могу понять это!

Любой

С точки зрения чтения указанного файла в именах файлов могут быть пробелы, поэтому было бы неплохо, если бы был какой-то способ заставить некоторые из существующих инструментов командной строки подсчитывать поля справа налево. Например, у нас есть cut . Тем не менее, cut находится слева и не будет принимать отрицательное число, чтобы означать начало нумерации справа (как мне кажется, наиболее очевидный синтаксис для меня). ... без необходимости писать программу для этого, есть ли простые способы?

Заранее спасибо, и особенно спасибо за объяснение любых примеров, которые вы можете предоставить!

Спасибо, RT

Ответы [ 4 ]

3 голосов
/ 12 февраля 2010

GNU findutils 4.2.5 +:

find -printf "$PWD"'/%p %M\n'
1 голос
/ 12 февраля 2010
stat -c %A file

Напечатает права доступа к файлу для файла.

Что-то вроде:

find . -exec echo -ne '{}\t\t' ';' -exec stat -c %A {} ';'

Даст вам плохо отформатированную версию того, что вам нужно.

Itсделано намного сложнее, потому что вы хотите, чтобы все выровнялось в таблицах.Возможно, вы захотите заглянуть в команду 'column'.TBH Я бы просто немного ослабил свои требования к продукции.Форматирование вывода в SH это боль в заднице.

0 голосов
/ 13 февраля 2010

Баш 4

shopt -s globstar
for file in /path/**
do
    stat -c "%n %A" "$file"
done
0 голосов
/ 12 февраля 2010

Это также можно сделать с помощью ls и awk:

ls -l -d $PWD/* | awk '{print $9 " " $1}' > my_files.txt
...