При работе сайтов в одном каталоге иногда скапливается очень большое количество файлов — чаще всего это кэш, если файлов в директории на одном уровне слишком много. Могут быть это сотни тысяч и миллионы файлов удалить их стандартными средствами бывает невозможно. В рамках материала будет рассмотрено как удалить большое количество файлов в Linux.
Команда ls, позволяющий в обычных условиях просмотреть содержимое каталога, будут потреблять всю доступную оперативную память (RAM). Команда rm -rf ./* при удалении будет потреблять все ресурсы диска. Будет достигаться лимит по количеству возможных операций ввода-вывода IO (input-output) или в ресурсы процессора.
Удалять файлы можно используя утилиту find. В отличие от ls или rm с указанием маски она не формирует изначально список содержимого каталога, а перебирает файлы по одному.
Посчитать количество файлов можно так
find /home/web/example.com/www/opt/cache/ -type f ¦ wc -l
Удаление большого количества файлов через find + exec
С -exec rm -f можно запустить процесс удаления файлов (он может занять длительное время)
find /home/web/example.com/www/opt/cache/ -type f -exec rm -f {} \;
Можно попробовать find с опцией delete
find /home/web/example.com/www/opt/cache/ -type f -delete
Скорее всего не даст никакого результата rm с указанием файлов по маске. Система при этом до того как начать удаление попытается сформировать полный список файлов, что сделать не получится
rm /home/web/example.com/www/opt/cache/*
Также существует вариант с ls -f, вывод которого перенаправляется в xargs по 100 файлов, затем удаляемых при помощи rm. Может успешно отрабатывать, однако если файлов слишком много вывести список не получится и с ls -f
cd /home/web/example.com/www/opt/cache/ ; ls -f . | xargs -n 100 rm
Самой эффективной командой обычно оказывается find с -exec rm -f. Однако все зависит от количества файлов и использовать стоит все представленные варианты.
Приоритет процессов при удалении имеет смысл максимально понижать используя nice и ionice. Если удаление большого количества файлов вручную требуется регулярно — алиасы можно добавить в .bashrc пользователя. Файл находится в домашнем каталоге пользователя имени которого производится удаление. Потом команды можно запускать по планировщику CRON.
Мы рассмотрели как удалить большое количество файлов в Linux.
Читайте также про конвертацию изображений.