find

Поделись знанием:
Перейти к: навигация, поиск

find — утилита поиска файлов по имени и другим свойствам, используемая в UNIX‐подобных операционных системах. Может производить поиск в одном или нескольких каталогах с использованием критериев, заданных пользователем. По умолчанию, find возвращает все файлы в рабочей директории. Более того, find позволяет применять пользователю определённые действия ко всем найденным файлам. Также поддерживаются регулярные выражения. Для поиска файлов по содержимому следует пользоваться утилитой grep.





Список ключей

  • -name — искать по имени файла, при использовании подстановочных образцов параметр заключается в кавычки. Опция `-name' различает прописные и строчные буквы; чтобы использовать поиск без этих различий, воспользуйтесь опцией `-iname'.
  • -type — тип искомого: f=файл, d=каталог, l=ссылка (link), p=канал (pipe), s=сокет.
  • -user — владелец: имя пользователя или UID.
  • -group — владелец: группа пользователя или GID.
  • -perm — указываются права доступа.
  • -size — размер: указывается в 512-байтных блоках или байтах (признак байтов — символ «c» за числом).
  • -atime — время последнего обращения к файлу (в днях).
  • -amin — время последнего обращения к файлу (в минутах).
  • -ctime — время последнего изменения владельца или прав доступа к файлу (в днях).
  • -cmin — время последнего изменения владельца или прав доступа к файлу (в минутах).
  • -mtime — время последнего изменения файла (в днях).
  • -mmin — время последнего изменения файла (в минутах).
  • -newer другой_файл — искать файлы созданные позже, чем другой_файл.
  • -delete — удалять найденные файлы.
  • -ls — генерирует вывод как команда ls -dgils.
  • -print — показывает на экране найденные файлы.
  • -exec command {} \; — выполняет над найденным файлом указанную команду; обратите внимание на синтаксис.
  • -ok — перед выполнением команды указанной в -exec, выдаёт запрос.
  • -depth или -d — начинать поиск с самых глубоких уровней вложенности, а не с корня каталога.
  • -maxdepth — максимальный уровень вложенности для поиска. «-maxdepth 0» ограничивает поиск текущим каталогом.
  • -prune — используется, когда вы хотите исключить из поиска определённые каталоги.
  • -mount или -xdev — не переходить на другие файловые системы.
  • -regex — искать по имени файла используя регулярные выражения.
  • -regextype тип — указание типа используемых регулярных выражений.
  • -P — не разворачивать символические ссылки (поведение по умолчанию).
  • -L — разворачивать символические ссылки.
  • -empty — только пустые каталоги.

Примеры

Поиск в текущей директории

Найти все файлы, начиная с текущей директории, название которых начинается на my.

find . -name 'my*'

Поиск в определенном каталоге

Найти все файлы, начиная с корневой директории, название которых начинается на my.

find / -name 'my*'

Поиск в директориях /usr/local/man и /opt/local/man файлов, название которых начинается на my.

find /usr/local/man /opt/local/man -name 'my*'

Поиск по нескольким именам файлов

Найти все файлы, начиная с текущей директории, название которых начинается на my или qu. Обратите внимание, что по умолчанию все аргументы соединены с помощью логического и (опция '-a'). Если необходимо объединить несколько аргументов логическим или — используйте опцию '-o'.

find . \( -name "my*" -o -name "qu*" \) -print

Поиск нескольких типов файлов, используя регулярные выражения

Найти все графические файлы, начиная с текущей директории, используя регулярные выражения.

find . -type f -regex ".*\.\(jpg\|jpeg\|gif\|png\|JPG\|JPEG\|GIF\|PNG\)"

Выполнение команды

Опция -exec выполняет следующую за ней команду и подставляет вместо {} текущий файл. Найти все каталоги ниже указанного каталога и изменить им права доступа:

find /path -type d -exec chmod 0755 {} \;

Опция -exec работает примерно в 10 раз медленнее, чем перенаправление вывода через xargs, поэтому данный код рекомендуется писать следующим образом:

find /path -type d | xargs chmod 0755

Однако, директории с именами, содержащими пробелы, методом перенаправления через xargs обработаны не будут, поэтому следует использовать первый вариант, дополненный:

find /path -type d -exec chmod 0755 "{}" \;

Поиск  всех файлов php.ini от текущего каталога и  замена текста в каждом  найденном файле.

find . -name 'php.ini' -exec sed -i 's/log_errors = Off/log_errors = On/g' "{}" \;

Поиск в зависимости от времени создания

Вывести список файлов во всей файловой системе, изменённых в течение последней минуты:

find / -mmin -1 -print

Вывести список файлов во всей файловой системе, которые были изменены более 31 дня назад:

find / -mtime +31 -print

Поиск по размеру файла

Вывести список файлов во всей файловой системе, чей размер больше 100 Мб:

find / -size +100M -print

Поиск файлов принадлежащих определенному пользователю

find . -user <userid>

Поиск файлов c ограничением глубины

При поиске в текущем каталоге, глубина поиска указывается от корневого каталога, а не от текущего.

find . -maxdepth 4 -name 'restore.php'

Поиск файлов с перечислением каталогов.

Ищет файлы в указанных каталогах.

find /var/spool/postfix/{deferred,active,maildrop,incoming}/ -type f

Рекурсивное удаление файла от текущего каталога, на заданную глубину.

Удаляет все файлы restore.php от текущего каталога, но не глубже 4 уровня вложенности относительно корневого каталога /

Начинает поиск в папке /var/www, но не глубже /var/www/*/*/ и удаляет все файлы restore.php в найденном.

find /var/www -maxdepth 4 -name 'restore.php' -exec rm -r {} \;

Игнорирование ошибок

Если при поиске возникает ошибка (например — нет доступа чтения из каталога) то вывод команды становится менее информативным. Перенаправьте вывод STDERR в /dev/null.

find / -name 'secret.keys' -print 2>/dev/null

Напишите отзыв о статье "Find"

Ссылки

  • [linux.die.net/man/1/find find(1)] — страница справки man по пользовательским командам GNU/Linux  (англ.)  (англ.)
  • [www.freebsd.org.ua/man/find.1.html «Страница Справочника find.1» ] — перевод man find из FreeBSD 7.1. (рус.)
  • [ant0.ru/broken_links.html «Как выловить битые ссылки» ] — с помощью find’а найти все битые ссылки.  (рус.)
  • [yournet.kz/blog/os/linux/poisk-fajlov-v-linux Поиск файлов в Linux] - разнообразные примеры использования команды find (рус.)


Отрывок, характеризующий Find

Граф Илья Андреич Ростов, озабоченно, торопливо похаживал в своих мягких сапогах из столовой в гостиную, поспешно и совершенно одинаково здороваясь с важными и неважными лицами, которых он всех знал, и изредка отыскивая глазами своего стройного молодца сына, радостно останавливал на нем свой взгляд и подмигивал ему. Молодой Ростов стоял у окна с Долоховым, с которым он недавно познакомился, и знакомством которого он дорожил. Старый граф подошел к ним и пожал руку Долохову.
– Ко мне милости прошу, вот ты с моим молодцом знаком… вместе там, вместе геройствовали… A! Василий Игнатьич… здорово старый, – обратился он к проходившему старичку, но не успел еще договорить приветствия, как всё зашевелилось, и прибежавший лакей, с испуганным лицом, доложил: пожаловали!
Раздались звонки; старшины бросились вперед; разбросанные в разных комнатах гости, как встряхнутая рожь на лопате, столпились в одну кучу и остановились в большой гостиной у дверей залы.
В дверях передней показался Багратион, без шляпы и шпаги, которые он, по клубному обычаю, оставил у швейцара. Он был не в смушковом картузе с нагайкой через плечо, как видел его Ростов в ночь накануне Аустерлицкого сражения, а в новом узком мундире с русскими и иностранными орденами и с георгиевской звездой на левой стороне груди. Он видимо сейчас, перед обедом, подстриг волосы и бакенбарды, что невыгодно изменяло его физиономию. На лице его было что то наивно праздничное, дававшее, в соединении с его твердыми, мужественными чертами, даже несколько комическое выражение его лицу. Беклешов и Федор Петрович Уваров, приехавшие с ним вместе, остановились в дверях, желая, чтобы он, как главный гость, прошел вперед их. Багратион смешался, не желая воспользоваться их учтивостью; произошла остановка в дверях, и наконец Багратион всё таки прошел вперед. Он шел, не зная куда девать руки, застенчиво и неловко, по паркету приемной: ему привычнее и легче было ходить под пулями по вспаханному полю, как он шел перед Курским полком в Шенграбене. Старшины встретили его у первой двери, сказав ему несколько слов о радости видеть столь дорогого гостя, и недождавшись его ответа, как бы завладев им, окружили его и повели в гостиную. В дверях гостиной не было возможности пройти от столпившихся членов и гостей, давивших друг друга и через плечи друг друга старавшихся, как редкого зверя, рассмотреть Багратиона. Граф Илья Андреич, энергичнее всех, смеясь и приговаривая: – пусти, mon cher, пусти, пусти, – протолкал толпу, провел гостей в гостиную и посадил на средний диван. Тузы, почетнейшие члены клуба, обступили вновь прибывших. Граф Илья Андреич, проталкиваясь опять через толпу, вышел из гостиной и с другим старшиной через минуту явился, неся большое серебряное блюдо, которое он поднес князю Багратиону. На блюде лежали сочиненные и напечатанные в честь героя стихи. Багратион, увидав блюдо, испуганно оглянулся, как бы отыскивая помощи. Но во всех глазах было требование того, чтобы он покорился. Чувствуя себя в их власти, Багратион решительно, обеими руками, взял блюдо и сердито, укоризненно посмотрел на графа, подносившего его. Кто то услужливо вынул из рук Багратиона блюдо (а то бы он, казалось, намерен был держать его так до вечера и так итти к столу) и обратил его внимание на стихи. «Ну и прочту», как будто сказал Багратион и устремив усталые глаза на бумагу, стал читать с сосредоточенным и серьезным видом. Сам сочинитель взял стихи и стал читать. Князь Багратион склонил голову и слушал.
«Славь Александра век
И охраняй нам Тита на престоле,
Будь купно страшный вождь и добрый человек,
Рифей в отечестве а Цесарь в бранном поле.
Да счастливый Наполеон,
Познав чрез опыты, каков Багратион,
Не смеет утруждать Алкидов русских боле…»
Но еще он не кончил стихов, как громогласный дворецкий провозгласил: «Кушанье готово!» Дверь отворилась, загремел из столовой польский: «Гром победы раздавайся, веселися храбрый росс», и граф Илья Андреич, сердито посмотрев на автора, продолжавшего читать стихи, раскланялся перед Багратионом. Все встали, чувствуя, что обед был важнее стихов, и опять Багратион впереди всех пошел к столу. На первом месте, между двух Александров – Беклешова и Нарышкина, что тоже имело значение по отношению к имени государя, посадили Багратиона: 300 человек разместились в столовой по чинам и важности, кто поважнее, поближе к чествуемому гостю: так же естественно, как вода разливается туда глубже, где местность ниже.
Перед самым обедом граф Илья Андреич представил князю своего сына. Багратион, узнав его, сказал несколько нескладных, неловких слов, как и все слова, которые он говорил в этот день. Граф Илья Андреич радостно и гордо оглядывал всех в то время, как Багратион говорил с его сыном.
Николай Ростов с Денисовым и новым знакомцем Долоховым сели вместе почти на середине стола. Напротив них сел Пьер рядом с князем Несвицким. Граф Илья Андреич сидел напротив Багратиона с другими старшинами и угащивал князя, олицетворяя в себе московское радушие.
Труды его не пропали даром. Обеды его, постный и скоромный, были великолепны, но совершенно спокоен он всё таки не мог быть до конца обеда. Он подмигивал буфетчику, шопотом приказывал лакеям, и не без волнения ожидал каждого, знакомого ему блюда. Всё было прекрасно. На втором блюде, вместе с исполинской стерлядью (увидав которую, Илья Андреич покраснел от радости и застенчивости), уже лакеи стали хлопать пробками и наливать шампанское. После рыбы, которая произвела некоторое впечатление, граф Илья Андреич переглянулся с другими старшинами. – «Много тостов будет, пора начинать!» – шепнул он и взяв бокал в руки – встал. Все замолкли и ожидали, что он скажет.
– Здоровье государя императора! – крикнул он, и в ту же минуту добрые глаза его увлажились слезами радости и восторга. В ту же минуту заиграли: «Гром победы раздавайся».Все встали с своих мест и закричали ура! и Багратион закричал ура! тем же голосом, каким он кричал на Шенграбенском поле. Восторженный голос молодого Ростова был слышен из за всех 300 голосов. Он чуть не плакал. – Здоровье государя императора, – кричал он, – ура! – Выпив залпом свой бокал, он бросил его на пол. Многие последовали его примеру. И долго продолжались громкие крики. Когда замолкли голоса, лакеи подобрали разбитую посуду, и все стали усаживаться, и улыбаясь своему крику переговариваться. Граф Илья Андреич поднялся опять, взглянул на записочку, лежавшую подле его тарелки и провозгласил тост за здоровье героя нашей последней кампании, князя Петра Ивановича Багратиона и опять голубые глаза графа увлажились слезами. Ура! опять закричали голоса 300 гостей, и вместо музыки послышались певчие, певшие кантату сочинения Павла Ивановича Кутузова.