Утилита 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 по их размеру
Поиск всех файлов
Показать все файлы в текущей директории:
findfind .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 с параметром 
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 -emptyfind ~/ -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 {} \;