Гимнастика атрибутов файла BASH:Как мне легко получить файл с полными путями и привилегиями?

StackOverflow https://stackoverflow.com/questions/2254370

  •  20-09-2019
  •  | 
  •  

Вопрос

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

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

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

/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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top