Якщо ви намагаєтесь одночасно видалити дуже велику кількість файлів (сьогодні я видалив каталог з 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