Linux. Команда find

12.05.2018

Теги: BashCLILinuxКомандаПоискФайл

Это одна из наиболее часто используемых команд Linux. Предназначена для поиска файлов и каталогов на основе условий. Ее можно использовать, например, для поиска файлов по разрешениям, владельцам, группам, типу, размеру и другим критериям.

find [каталог] [опции] [действие]
  • каталог — каталог, в котором будем искать файлы
  • опции — критерии поиска и дополнительные опции
  • действие — действия с найденными файлами с помощью опции -exec.

Основные опции

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

Допускается использование нескольких критериев поиска:

  • -newer php.ini -a -size +10M — файл будет найден, если оба критерия верны; -a используется по умолчанию, поэтому его можно опускать;
  • -name "*.html" -o -name "*.php" — файл будет найден, если хотя бы один критерий поиска возвращает истину;
  • -not -newer php.ini — инвертирует критерий поиска.

Примеры

Показать все файлы в текущей директории:

$ find
$ find .

Показать все файлы в указанной директории:

$ find ./test

Искать файлы по имени в текущей папке:

$ find . -name "*.jpg"

Не учитывать регистр при поиске по имени:

$ find . -iname "test*"

Поиск файлов по имени только в текущей папке:

$ find . -maxdepth 1 -name "*.php"

Найти файлы в директории, которые не соответствуют шаблону:

$ find /some/path -not -name "test*"

Найти файлы, начинающиеся на test, но без расширения .php:

$ find /some/path -name "test" -not -name "*.php"

Найти все файлы с раширением .html или .php:

$ find /some/path -name "*.html" -o -name "*.php"

Найти все файлы в двух каталогах с расширением .c:

$ find /some/path/one /some/path/two -type f -name "*.c"

Найти скрытые файлы (начинающиеся на точку) в домашней директории:

$ find ~ -type f -name ".*"

Найти файлы в директории с маской прав 0664:

$ find /some/path -type f -perm 0664

Найти все файлы с установленным флагом suid/guid:

$ find /some/path -type f -perm 2644
$ find /some/path -type f -perm /u=s

Поиск файлов только для чтения:

$ find /etc -type f -perm /u=r

Найти только исполняемые файлы:

$ find /bin -type f -perm /a=x

Найти все файлы, принадлежащие пользователю evgeniy:

$ find /some/path -user evgeniy

Поиск файлов, принадлежащих группе developer:

$ find /var/www -group developer

Найти файлы, модифицированные 30 дней назад:

$ find /some/path -type f -mtime 30

Поиск файлов, открытых 30 дней назад:

$ find /some/path -type f -atime 30

Найти файлы, модифицированные между 30 и 60 дней назад:

$ find /some/path -type f -mtime +30 -mtime -60

Найти файлы, измененные в течении последнего часа:

$ find /some/path -type f -cmin -60

Найти все файлы размером 50 мегабайт:

$ find /some/path -type f -size 50M

Все файлы от пятидесяти до ста мегабайт:

$ find /some/path -type f -size +50M -size -100M

Поиск пустых файлов и директорий:

$ find /tmp -type f -empty
$ find ~ -type d -empty

Действия с найденными файлами

Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, выполнить команду ls для получения подробной информации о каждом файле:

$ find . -exec ls -ld {} \;
$ find . -exec ls -ld {} +

Удалить все текстовые файлы в директории tmp

$ find /tmp -type f -name "*.txt" -exec rm -f {} \;
$ find /tmp -type f -name "*.txt" -exec rm -f {} +

Удалить все log-файлы больше 100 мегабайт

$ find /home/evgeniy/log -type f -name "*.log" -size +100M -exec rm -f {} \;
$ find /home/evgeniy/log -type f -name "*.log" -size +100M -exec rm -f {} +

Удалить все жесткие ссылки в директории /tmp/hardlinks

$ find /tmp/hardlinks -type f -not -links 1 -delete
$ find /tmp/hardlinks -type f -links +1 -delete

Поиск: Bash • CLI • Linux • find • Команда • Поиск • Файл

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.