7

Я хочу использовать find для получения всех simlinks и обычных файлов. Я могу использовать -type для них по отдельности, и я могу использовать -o, чтобы связать их вместе, но я, очевидно, не могу сделать -type fl .

Есть ли способ сжать эту команду? Это довольно обременительно.

find -type l -name node-dev -exec ls -lah {} + -o -type f -name node-dev -exec ls -lah {} +

Я хотел бы иметь возможность запустить его без -o , например:

find -type lf -name node-dev -exec ls -lah {} +

Страница man, кажется, указывает на то, что это невозможно (она ничего не говорит о аргументах флагов дополнительного -type ), но я решил все равно спросить и попытаться чему-то научиться.

Обратите внимание, что файлы не имеют никаких гарантий относительно разумной структуры имен расширений, поэтому любые решения на основе регулярных выражений, вероятно, не будут работать. Кроме того, я мог бы использовать '!' Оператор для исключения каталогов, как предлагает этот ответ, но в идеале я бы хотел исключить из поиска больше, чем просто каталоги.

1 ответ1

9
# Apply to only link or file type directory entries: 
$ find . \( -type l -o -type f \) -name node-dev -exec ls -lah {} \;

# Apply to anything but a directory - add more with -o in between "\(" & "\)" meta-characters:
$ find . ! \( -type d \) -name node-dev -exec ls -lah {} \;

Обратите внимание, что в команде find есть ключ -ls, который может заменить вызов -exec, учитывая, что поиск может быть медленным с самого начала, но необходимость создания нового процесса для каждого найденного файла действительно лучше использует системные ресурсы в другом месте.

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