Базовый паттерн: сначала сужаем поиск условиями, потом применяем действие (-print, -delete, -exec).
Найти файлы по имени
find /var/www -type f -name '*.php' -print
find /etc -type f -iname 'nginx*.conf' -print
Ограничить глубину
find /var/log -maxdepth 1 -type f -print
Исключить каталоги
find /var/www -path '/var/www/cache' -prune -o -type f -name '*.js' -print
По размеру
find / -type f -size +100M -print
find /backup -type f -size -10k -print
По дате и времени
find /var/log -type f -mtime -1 -print # изменены за последние сутки
find /data -type f -newermt '2025-09-01' -print
По владельцу и правам
find /srv -type f -user www-data -print
find / -type f -perm -4000 -print # SUID файлы
Действия: безопасный режим и «массовые» операции
Всегда сначала смотрим, что затронем
find /data -type f -name '*.tmp' -print
Удаление пустых и временных файлов
find /data -type f -empty -delete
find /var/tmp -type f -name '*.tmp' -delete
Замена строк в куче файлов
find /etc/nginx -type f -name '*.conf' -exec sed -i 's/http1 on;/http2 off;/g' {} +
Перемещение найденного в каталог
find /incoming -type f -name '*.csv' -exec mv -t /data/csv {} +
Сумма размеров найденных файлов
find /var/lib/mysql -type f -printf '%s\n' | awk '{s+=$1} END{printf "Total: %.2f GB\n", s/1024/1024/1024}'
С нулевыми байтами для корректной обработки пробелов
find /media -type f -name '*.php' -print0 | xargs -0 -I{} echo "{}"
Частые кейсы «нашего админа»
Найти битые симлинки
find / -xtype l -print
Оставаться в одном ФС (быстро и безопасно)
find /var -xdev -type f -size +500M -print
Найти потенциально публичные приватные ключи
find / -type f -name '*.key' -perm -o+r -print 2>/dev/null
Быстрое дерево крупных директорий
find /data -xdev -type f -printf '%s\t%h\n' | awk '{a[$2]+=$1} END{for (i in a) printf "%.2f GB\t%s\n", a[i]/1024/1024/1024, i}' | sort -hr | head -n 20
Заменить расширение файлов пачкой
find /assets -type f -name '*.jpeg' -exec bash -lc 'for p; do mv "$p" "${p%.jpeg}.jpg"; done' _ {} +
Производительность и гигиена
- Начинайте с узкого префикса пути и -maxdepth.
- Комбинируйте -prune для исключений.
- Для массовых действий используйте {} + вместо многократных вызовов.
- При ошибках доступа добавляйте 2>/dev/null, но лучше запускать от нужного пользователя или sudo.