Гимнастика атрибутов файла BASH:Как мне легко получить файл с полными путями и привилегиями?
Вопрос
Уважаемые мастера командной строки,
У меня есть дерево каталогов, для которого я хочу создать файл, содержащий по две записи в строке:полный путь для каждого файла и соответствующие привилегии этого файла.
Например, одна строка может содержать:
/v1.6.0.24/lib/mylib.jar -r-xr-xr-x
Лучший способ создать левый столбец, по-видимому, находить.Однако, поскольку лс похоже, у него нет возможности ни читать список имен файлов, ни принимать стандартный ввод, похоже, мне придется прибегнуть к сценарию, который сделает это за меня....Громоздко.
Я был уверен, что видел людей, которым каким-то образом удавалось запускать команду для каждого найденного файла, но сегодня утром я, должно быть, сошел с ума, потому что не могу в этом разобраться!
Любой?
С точки зрения чтения указанного файла в именах файлов могут быть пробелы, поэтому Конечно, было бы здорово, если бы существовал способ заставить некоторые из существующих инструментов командной строки подсчитывать поля справа налево. Например, у нас есть резать.Однако, резать идет слева и не принимает отрицательное число, означающее начало нумерации справа (что мне кажется наиболее очевидным синтаксисом)....Есть ли простые способы сделать это без необходимости писать программу?
Заранее спасибо и особенно за объяснение любых примеров, которые вы можете привести!
Спасибо, Rt
Решение
ГНУ findutils
4.2.5+:
find -printf "$PWD"'/%p %M\n'
Другие советы
stat -c %A file
Распечатает права доступа к файлу.
Что-то вроде:
find . -exec echo -ne '{}\t\t' ';' -exec stat -c %A {} ';'
Даст вам плохо отформатированную версию того, что вам нужно.
Это становится намного сложнее, потому что вы хотите, чтобы все было выровнено в таблицах.Возможно, вы захотите изучить команду «столбец».Честно говоря, я бы просто немного ослабил требования к выходу.Форматирование вывода в SH — это заноза в заднице.
Это также можно сделать с помощью ls и awk:
ls -l -d $PWD/* | awk '{print $9 " " $1}' > my_files.txt
баш 4
shopt -s globstar
for file in /path/**
do
stat -c "%n %A" "$file"
done