Вы просто упускаете предикат, который говорит, что вы ищете (например, -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"