Удаление большого количества файлов в Linux


При работе сайтов в одном каталоге иногда скапливается очень большое количество файлов — чаще всего это кэш, если файлов в директории на одном уровне слишком много. Могут быть это сотни тысяч и миллионы файлов удалить их стандартными средствами бывает невозможно. В рамках материала будет рассмотрено как удалить большое количество файлов в 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.

Читайте также про конвертацию изображений.

Сказать спасибо