Команда Find в Linux (поиск файлов и каталогов)

Поиск файлов в Linux с помощью командной строки

Команда find — один из самых мощных инструментов в арсенале системных администраторов Linux. Она ищет файлы и каталоги в иерархии каталогов по заданному пользователем выражению и может выполнять заданные пользователем действия над каждым найденным файлом.

Команду find можно использовать для поиска файлов и каталогов по их правам доступа, типу, дате, владельцу, размеру и другим параметрам. Её также можно комбинировать с другими инструментами, такими как grep или sed .

find Синтаксис команды

Общий синтаксис команды find следующий:

 find [ options ] [ path... ] [ expression ]
  • Атрибут options управляет обработкой символических ссылок, параметрами отладки и методом оптимизации.
  • Атрибут path... определяет начальный каталог или каталоги, в которых find будет искать файлы.
  • Атрибут expression состоит из параметров, шаблонов поиска и действий, разделенных операторами.

Для поиска файлов в каталоге пользователь, вызывающий команду find должен иметь разрешения на чтение этого каталога.

Давайте рассмотрим следующий пример:

 find -L /var/www -name "*.js"
  • Опция -L (опции) указывает команде find следовать символическим ссылкам.
  • /var/www (путь…) указывает каталог, в котором будет выполняться поиск.
  • (Выражение) -name "*.js указывает find искать файлы, заканчивающиеся на .js (файлы JavaScript).

Найти файлы по имени

Поиск файлов по имени — пожалуй, самый распространённый способ применения команды find . Чтобы найти файл по имени, используйте опцию -name , а затем имя искомого файла.

Например, чтобы найти файл с именем document.pdf в каталоге /home/linuxize , используйте следующую команду:

 find /home/linuxize -type f -name document.pdf

Чтобы выполнить поиск без учета регистра, измените опцию -name на -iname :

 find /home/linuxize -type f -iname document.pdf

Приведенная выше команда будет соответствовать «Document.pdf», «DOCUMENT.pdf» и т. д.

Найти файлы по расширения

Поиск файлов по расширению аналогичен поиску файлов по имени. Например, чтобы найти все файлы, заканчивающиеся на .log.gz в каталоге /var/log/nginx , введите:

 find /var/log/nginx -type f -name '*.log.gz'

Важно отметить, что вам необходимо либо заключить шаблон в кавычки, либо экранировать символ звездочки * обратной косой чертой , чтобы оболочка не интерпретировала его при использовании подстановочного знака.

Чтобы найти все файлы, не соответствующие регулярному выражению *.log.gz можно использовать опцию -not . Например, чтобы найти все файлы, не заканчивающиеся на *.log.gz , используйте:

 find /var/log/nginx -type f -not -name '*.log.gz'

Найти файлы по типу

Иногда может потребоваться поиск файлов определённых типов, таких как обычные файлы, каталоги или символические ссылки. В Linux всё является файлом.

Для поиска файлов по их типу используйте параметр -type и один из следующих дескрипторов для указания типа файла:

  • f : обычный файл
  • d : каталог
  • l : символическая ссылка
  • c : символьные устройства
  • b : блочные устройства
  • p : именованный канал (FIFO)
  • s : гнездо

Например, чтобы найти все каталоги в текущем рабочем каталоге , можно использовать:

 find . -type d

Типичным примером будет рекурсивное изменение прав доступа к файлам веб-сайта на 644 и прав доступа к каталогам на 755 с помощью команды chmod :

 find /var/www/my_website -type d -exec chmod 0755 {} ; find /var/www/my_website -type f -exec chmod 0644 {} ;

Найти файлы по размеру

Чтобы найти файлы по размеру, передайте параметр -size вместе с критериями размера. Для указания размера файла можно использовать следующие суффиксы:

  • b : блоки по 512 байт (по умолчанию)
  • c : байты
  • w : двухбайтовые слова
  • k : Килобайты
  • M : Мегабайты
  • G : Гигабайты

Следующая команда найдет все файлы размером ровно 1024 байта внутри каталога /tmp :

 find /tmp -type f -size 1024c

Команда find также позволяет искать файлы, размер которых больше или меньше указанного.

В следующем примере мы ищем все файлы размером менее 1MB в текущем рабочем каталоге. Обратите внимание на знак «минус - перед значением размера:

 find . -type f -size -1M

Если вы хотите найти файлы размером более 1MB , то вам нужно использовать символ плюс + :

 find . -type f -size +1M

Вы можете даже искать файлы в заданном диапазоне размеров. Следующая команда найдёт все файлы размером от 1 до 2MB :

 find . -type f -size +1M -size 21M

Найти файлы по дате изменения

Команда find также может искать файлы по времени их последнего изменения, доступа или модификации.

Как и при поиске по размеру, используйте символы плюс и минус для «больше чем» или «меньше чем».

Предположим, несколько дней назад вы изменили один из файлов конфигурации Dovecot, но забыли, какой именно. Вы можете легко отфильтровать все файлы в каталоге /etc/dovecot/conf.d , заканчивающиеся на .conf и изменённые за последние пять дней:

 find /etc/dovecot/conf.d -name "*.conf" -mtime 5

Вот ещё один пример фильтрации файлов по дате изменения с помощью параметра -daystart . Эта команда выведет список всех файлов в каталоге /home , которые были изменены 30 или более дней назад:

 find /home -mtime +30 -daystart

Найти файлы по разрешениям

Параметр -perm позволяет искать файлы на основе прав доступа к ним.

Например, чтобы найти все файлы с правами доступа ровно 775 внутри каталога /var/www/html , вы должны использовать:

 find /var/www/html -perm 644

Вы можете указать числовой режим с помощью знака минус - или косой черты / .

Если в качестве префикса используется слеш / , то по крайней мере одна категория (пользователь, группа или другие) должна иметь по крайней мере соответствующие биты, установленные для сопоставления файла.

Рассмотрим следующий пример команды:

 find . -perm /444

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

Если в качестве префикса используется - , то для соответствия файла необходимо установить как минимум указанные биты. Следующая команда выполнит поиск файлов, имеющих разрешение на чтение и запись для владельца и группы, и доступных для чтения другим пользователям:

 find . -perm -664

Найти файлы по номеру

Чтобы найти файлы, принадлежащие определенному пользователю или группе, используйте параметры -user и -group .

Например, чтобы найти все файлы и каталоги, принадлежащие пользователю linuxize , выполните:

 find / -user linuxize

Вот реальный пример. Допустим, вы хотите найти все файлы, владельцем которых является пользователь www-data и изменить владельца найденных файлов с www-data на nginx :

 find / -user www-data -type f -exec chown nginx {} ;

Найти и удалить файлы

Чтобы удалить все соответствующие файлы, добавьте опцию -delete в конец выражения соответствия.

Используйте эту опцию только тогда, когда уверены, что результат соответствует файлам, которые вы хотите удалить. Рекомендуется всегда выводить список найденных файлов перед использованием опции -delete .

Например, чтобы удалить все файлы, заканчивающиеся на .temp из /var/log/ , можно использовать:

 find /var/log/ -name `*.temp` -delete

Используйте опцию -delete с особой осторожностью. Команда find обрабатывается как выражение, и если вы сначала добавите опцию -delete , команда удалит всё, что находится ниже указанных вами начальных точек.

Что касается каталогов, find может удалять только пустые каталоги, так же как rmdir .

Заключение

Мы показали вам, как использовать команду find с различными параметрами и критериями.

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

Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.

найти терминал

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *