- Опубликовано: 6 мар 2025
- 249
Как удалить миллионы файлов в 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, независимо от количества файлов!
Была статья полезной: