- Опубликовано: 6 мар 2025
- 74
Как удалить миллионы файлов в Linux, если rm -rf не работает?
Как удалить миллионы файлов в Linux, если rm -rf
не работает?
При очистке директории в Linux команда
rm -rf /var/www/rs/temp/*
может не сработать, если в папке слишком много файлов. В таком случае появляется ошибка:
-bash: /bin/rm: Argument list too long
Эта ошибка связана с ограничением размера аргументов в командной строке (ARG_MAX
). В Linux есть несколько способов обойти это ограничение и эффективно удалить миллионы файлов.
1. Использование find
+ -delete
(Оптимальный способ)
Если в папке содержатся только файлы (без поддиректорий), самый простой способ очистки:
find /var/www/rs/temp/ -type f -delete
Что делает эта команда?
-
find /var/www/rs/temp/
— ищет файлы в указанной директории. -
-type f
— выбирает только файлы (без папок). -
-delete
— сразу удаляет найденные файлы.
Если в папке есть вложенные каталоги и их тоже нужно удалить:
find /var/www/rs/temp/ -mindepth 1 -delete
-mindepth 1
гарантирует, что сама папка /var/www/rs/temp/
не удалится, а очистится только её содержимое.
2. Очистка через rsync
(Быстрое удаление)
Этот метод удобен, если файлов очень много и find
работает слишком долго.
- Создаём пустую временную директорию:
mkdir /empty
- Используем
rsync
для удаления всех файлов в/var/www/rs/temp/
:rsync -a --delete /empty/ /var/www/rs/temp/
- Удаляем временную директорию
/empty
:rmdir /empty
Как это работает?
rsync -a --delete
синхронизирует пустую папку с /var/www/rs/temp/
, тем самым удаляя всё внутри неё.
3. Очистка через find
+ xargs
(Для экстремально большого количества файлов)
Если find -delete
медленный или выдаёт ошибки, можно передавать файлы пакетами в rm
через xargs
:
find /var/www/rs/temp/ -type f | xargs rm -f
Если всё равно появляется ошибка Argument list too long
, попробуй вариант с -print0
:
find /var/www/rs/temp/ -type f -print0 | xargs -0 rm -f
В этом варианте:
-
-print0
и-0
позволяют корректно обрабатывать файлы с пробелами и спецсимволами в именах. -
xargs
передаёт файлы вrm
частями, избегая ограниченияARG_MAX
.
4. Полное удаление папки и её пересоздание (Радикальный метод)
Если тебе не важны права и структура внутри /var/www/rs/temp/
, можно просто удалить её и создать заново:
rm -rf /var/www/rs/temp/
mkdir /var/www/rs/temp/
chown www-data:www-data /var/www/rs/temp/ # если это веб-сервер
chmod 755 /var/www/rs/temp/
Этот метод самый быстрый, но он удалит всё, включая поддиректории.
Какой способ выбрать?
Вывод
Когда стандартный rm -rf
не срабатывает из-за ошибки "Argument list too long", у нас есть несколько решений:
✅ find -delete
— универсальный способ.
✅ rsync --delete
— быстрое удаление.
✅ xargs
— обработка больших списков файлов.
✅ rm -rf
+ mkdir
— если нужно удалить всё без разбора.
Если файлов миллионы, лучший вариант — rsync --delete
или find -delete
.
Теперь ты знаешь, как очистить любую папку в Linux, независимо от количества файлов!
Была статья полезной: