1

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

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

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

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

2 ответа2

2

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

1

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .