Моя цель - найти все файлы pdf на удаленной машине, поэтому я прибегаю к полезной команде find
. Так я набираю
найти ~ * .pdfили
найти ~ "* .pdf"и я ничего не получаю. Я делаю то же самое на своей машине и ничего не получаю. Я делаю регулярный поиск по меню на моем компьютере, и я нахожу довольно много PDF-файлов. Кто-нибудь, пожалуйста, скажите мне, что я делаю не так?
find
это далеко не бесполезно.find
что интуитивно понятно. Я мог бы, вероятно, сказать то же самое более приятным тоном; иногда я реагирую на (глупые) негативные комментарии.Ответы:
find
далеко не бесполезен. Вы просто не используете это должным образом.пытаться:
find . -type f -iname '*.pdf'
источник
Посмотрите на документацию по findutils .
find
Команда является невероятно мощным и, следовательно, имеет довольно сложный интерфейс. Вы можете делать то, что вы хотите с:Вышеприведенная команда означает «найти в. Для записей файла типа с нечувствительным к регистру именем, совпадающим с * .pdf (и напечатать имя таких совпадений)». Команда find может фактически использоваться для выполнения команд над найденными файлами (вместо или в дополнение к печати имен файлов). Однако для ваших целей вам может быть удобнее использовать команду locate , которая - при условии, что вы создали базу данных locate с использованием updatedb - позволяет очень легко находить файлы. Например:
Вы также обнаружите, что команда locate обычно быстрее, чем команда find, так как locate использует индекс имен файлов (база данных locate), тогда как find будет проходить иерархию для каждого вызова.
источник
Вы просто упускаете предикат, который говорит, что вы ищете (например,
-name
)Найти в домашнем каталоге по имени:
Обратите внимание, что подстановочный знак
*
должен быть экранирован, чтобы оболочка не интерпретировала его до того, как find получит его. Использование'*.pdf'
и"*.pdf"
будет иметь тот же эффект, что и\*.pdf
.Чтобы найти без учета регистра:
Чтобы обрезать результаты только по файлам (выражение имени, вероятно, позаботится об этом за вас, но на случай, если у вас есть какие-то странно названные каталоги):
Чтобы убедиться, что find идет по символическим ссылкам (я обычно хочу сделать это сам при выполнении поиска):
Чтобы сделать что-то с найденными вами файлами: вы можете сбросить это в файл, используя перенаправление stdout (например, прикрепить
> filename
в конце), или использовать-exec
опцию для запуска команды (см. Man-страницу для подробностей). Однако последний запускает команду для каждого файла за раз. часто быстрее позволитьxargs
команде передать найденные файлы в качестве аргументов другой команде, все сразу или большие куски за раз. Например, для специальных (но неиндексированных) операций поиска в файлах заголовков:И последнее расширение, чтобы эта последняя команда работала правильно, если у вас есть файлы и каталоги с пробелами в них:
источник
взгляните на этот урок
я думаю, что вы хотите сделать, это
источник
iname
атрибут для лучшего видения прихожейРаньше я совмещал находку с grep как
находить . , | grep -i ".pdf"
Может быть, не очень эффективный, но он отлично справляется со своей работой.
источник
find
непосредственно , если вы хотели, с помощью-iregex
:find ~ -iregex '.*\.pdf'
. Проблема в том,find
что шаблон обрабатывается так, как если бы он всегда имел^
спереди и$
сзади, поэтому ваш шаблон должен быть немного сложнее. Также обратите внимание:.
в вашем шаблоне на самом деле используется подстановочный знак из одного символа, а не буквальный период.Найдите нужные вам файлы за последние x дней
найдет вам pdf файлы в вашем домашнем
~
каталоге и ниже с расширением.pdf
независимо от прописных и строчных букв (то есть я вiname
) и изменен до 1 дня назад, потому что я добавилmtime -1
; если вы введете -60 в mtime, это будут последние 60 дней.источник
Для выполнения поиска по «найденным» файлам есть такая конструкция:
Команда exec должна заканчиваться экранированным ";" и -H необходим для grep, чтобы распечатать путь к файлу в дополнение к строке в файле, где находится "строка".
источник