Вы просто упускаете предикат, который говорит, что вы ищете (например, -name
)
Найти в домашнем каталоге по имени:
find ~ -name \*.pdf
Обратите внимание, что подстановочный знак *
должен быть экранирован, чтобы оболочка не интерпретировала его до того, как find получит его. Использование '*.pdf'
и "*.pdf"
будет иметь тот же эффект, что и \*.pdf
.
Чтобы найти без учета регистра:
find ~ -iname \*.pdf
Чтобы обрезать результаты только по файлам (выражение имени, вероятно, позаботится об этом за вас, но на случай, если у вас есть какие-то странно названные каталоги):
find ~ -type f -iname \*.pdf
Чтобы убедиться, что find идет по символическим ссылкам (я обычно хочу сделать это сам при выполнении поиска):
find ~ -follow -type f -iname \*.pdf
Чтобы сделать что-то с найденными вами файлами: вы можете сбросить это в файл, используя перенаправление stdout (например, прикрепить > filename
в конце), или использовать -exec
опцию для запуска команды (см. Man-страницу для подробностей). Однако последний запускает команду для каждого файла за раз. часто быстрее позволить xargs
команде передать найденные файлы в качестве аргументов другой команде, все сразу или большие куски за раз. Например, для специальных (но неиндексированных) операций поиска в файлах заголовков:
find ~ -follow -type f -name \*.h | xargs grep -nH "identifier"
И последнее расширение, чтобы эта последняя команда работала правильно, если у вас есть файлы и каталоги с пробелами в них:
find ~ -follow -type f -name \*.h -print0 | xargs -0 grep -nH "identifier"
find
это далеко не бесполезно.