Если вы пытаетесь удалить очень большое количество файлов за один раз (сегодня я удалил каталог с 485 000+), вы, вероятно, столкнетесь с этой ошибкой:
/bin/rm: Argument list too long.
Проблема заключается в том, что когда вы набираете что-то вроде rm -rf *
, то *
заменяется списком каждого соответствующего файла, например, «rm -rf file1 file2 file3 file4» и так далее. Для хранения этого списка аргументов имеется относительно небольшой буфер памяти, и, если он заполнен, оболочка не выполнит программу.
Чтобы обойти эту проблему, многие люди используют команду find, чтобы найти каждый файл и передать их один за другим команде «rm», например так:
find . -type f -exec rm -v {} \;
Моя проблема в том, что мне нужно было удалить 500 000 файлов, и это заняло слишком много времени.
Я наткнулся на гораздо более быстрый способ удаления файлов - команда «find» имеет встроенный флаг «-delete»! Вот что я в итоге использовал:
find . -type f -delete
Используя этот метод, я удалял файлы со скоростью около 2000 файлов в секунду - намного быстрее!
Вы также можете показать имена файлов при их удалении:
find . -type f -print -delete
... или даже показать, сколько файлов будет удалено, а затем время, необходимое для их удаления:
root@devel# ls -1 | wc -l && time find . -type f -delete
100000
real 0m3.660s
user 0m0.036s
sys 0m0.552s