Полный цикл в digital

Утилита find поиск файлов в Linux

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

Синтаксис утилиты find

find папка параметры критерий шаблон действие
  • Папка каталог в котором будем искать
  • Параметры дополнительные параметры, например, глубина поиска
  • Критерий по какому критерию будем искать: имя, дата создания, права, владелец
  • Шаблон непосредственно значение по которому будем отбирать файлы
  • Действие что будем делать с найденым

Параметры find

  • -P никогда не открывать символические ссылки
  • -L получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл
  • -maxdepth максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1
  • -depth искать сначала в текущем каталоге, а потом в подкаталогах
  • -mount искать файлы только в этой файловой системе
  • -version показать версию утилиты find
  • -print выводить полные имена файлов
  • -type f искать только файлы
  • -type d поиск папки в Linux

Критерии find

Критериев у команды find в Linux очень много, и мы опять же рассмотрим только основные:

  • -name поиск файлов по имени
  • -perm поиск файлов в Linux по режиму доступа
  • -user поиск файлов по владельцу
  • -group поиск по группе
  • -mtime поиск по времени модификации файла
  • -atime поиск файлов по дате последнего чтения
  • -nogroup поиск файлов, не принадлежащих ни одной группе
  • -nouser поиск файлов без владельцев
  • -newer найти файлы новее чем указанный
  • -size поиск файлов в Linux по их размеру

Поиск всех файлов

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

find
find .
find . -print

Все три команды покажут одинаковый результат. Точка здесь означает текущую папку. Вместо неё можно указать любую другую.

Поиск файлов в определенной папке

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

find ./Изображения

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

find . -name "*.png"

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

find . -name "testfile*"

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

find . -iname "TeStFile*"

Ограничение глубины поиска

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

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

Инвертирование шаблона

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

 find . -not -name "test*"

Несколько критериев

Поиск командой find по нескольким критериям, с оператором исключения:

find . -name "test" -not -name "*.php"

Найдет все файлы, начинающиеся на test, но без расширения php. Эта команда найдёт как php, так и html файлы. А теперь рассмотрим оператор ИЛИ:

find -name "*.html" -o -name "*.php"

Тип файла

По умолчанию find ищет как каталоги, так и файлы. Если вам необходимо найти только каталоги используйте критерий type с параметром d:

find . -type d -name "Загрузки"

Для поиска только файлов необходимо использовать параметр f:

find . -type f -name "Загрузки"

Несколько каталогов

Искать в двух каталогах одновременно:

find ./test ./test2 -type f -name "*.c"

Поиск скрытых файлов

Найти скрытые файлы только в текущей папке. Имена скрытых файлов в Linux начинаются с точки:

find . -maxdepth 1 -type f -name ".*"

Поиск по разрешениям

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

find . -type f -perm 0664

Права также можно задавать буквами для u (user), g (group) и o (other). Например, для того чтобы найти все файлы с установленным флагом Suid в каталоге /usr выполните:

find /usr -type f -perm /u=s

Поиск файлов доступных владельцу только для чтения только в каталоге /etc:

find /etc -maxdepth 1 -perm /u=r

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

find /bin -maxdepth 2 -perm /a=x

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

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

find . -user sergiy

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

find /var/www -group www-data

Поиск по дате модификации

Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:

find / -mtime 50

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

find / -atime 50

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

find / -mtime +50 -mtime -100

Найти файлы измененные в течении часа:

find . -cmin 60

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

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

find / -size 50M

От пятидесяти до ста мегабайт:

find / -size +50M -size -100M

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

find . -type f -exec ls -s {} \; | sort -n -r | head -5

Самые большие:

find . -type f -exec ls -s {} \; | sort -n | head -5

Поиск пустых файлов и папок

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

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

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

find . -empty -exec ls -ld {} \;

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

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

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

find /home/bob/dir -type f -name *.log -size +100M -exec rm -f {} \;
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг