Я делаю команду поиска, чтобы показать мне файлы определенного расширения, например:
find $directory -type f -name "*.vm"
Тем не менее, я хотел бы также видеть права доступа к файлам (как показывает ls -l).
Как это может быть сделано?
Я делаю команду поиска, чтобы показать мне файлы определенного расширения, например:
find $directory -type f -name "*.vm"
Тем не менее, я хотел бы также видеть права доступа к файлам (как показывает ls -l).
Как это может быть сделано?
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
Вы можете указать опцию -ls
для find
. Или, если вам нужен определенный формат, используйте -exec
:
find "$directory" -type f -name '*.vm' -exec ls -l {} \;