linux: как показать права доступа к файлам (подобно тому, как ls -l) показывает права доступа к файлам, возвращаемым командой find

linux: как показать права доступа к файлам (подобно тому, как ls -l) показывает права доступа к файлам, возвращаемым командой find

Я использую команду find, чтобы найти файлы определенного расширения, например:

find $directory -type f -name "*.vm"

Однако я хотел бы также иметь возможность видеть права доступа к файлам (как показывает ls -l).

Как это может быть сделано?

решение1

У GNU findесть -lsдиректива, которую вы можете использовать. Она имеет выходной формат, довольно близкий, но не совсем соответствующий ls -l.

Действие по умолчанию find, если не указано, -printпросто выводит имя файла и путь, как найдено. Если вы добавите (или замените -printна) -ls, то получите более подробный список.

Если вам нужен какой-то определенный формат по какой-то причине, -printfэто то, что вам нужно. Например, попробуйте это:

find . -printf "%M %n %8.8u %8.8g %8.8s %Ax %AX %p\n"

чтобы приблизительно воспроизвести ls -lвыходной формат. (Здесь используется другое форматирование даты; возможно, там также можно будет воспроизвести поведение ls; см. findстраницу руководства для получения подробной информации о доступных спецификаторах форматирования и printf(3)для получения подробной информации о том, что делают числа.)

В общем, вы хотитеизбегатьиспользуя -execесли вы можете, и если вам нужно использовать -exec, выхотетьпопытаться использовать, +а не {}давать несколько имен файлов в одном вызове. В противном случае команда будет выполняться один раз для каждого найденного файла, соответствующего критериям, что при большом количестве файлов может привести к существенному снижению производительности.

Также обратите внимание, что если вам не нужно поведение рекурсии, самым простым решением может быть простое использование ls в первую очередь:ls -ld $directory/*.vm

решение2

Вы можете указать -lsопцию find. Или, если вам нужен определенный формат, используйте -exec:

find "$directory" -type f -name '*.vm'  -exec ls -l {} \;

Связанный контент