Утилита 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 {} \;