%20%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%B5%D1%82%20%D0%BF%D1%80%D0%B0%D0%B2%D0%B0%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0%20%D0%BA%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D0%BC%2C%20%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D0%B5%D0%BC%D1%8B%D0%BC%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BE%D0%B9%20find.png)
Я использую команду 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 {} \;