Не все знают, но в линукс удаление большого количества файлов - задача не из простых. Особенно когда речь идет о сотнях тысяч или миллионах объектов в одной директории. Часто встречаешь ошибку
Argument list too long, а даже если команда и запускается, она может висеть часами. Сегодня про то, а какой же способ удаления самый быстрый.▪️ На тесте будут следующие команды:
rm -r test/
rm -r test/*
find test/ -type f -delete
cd test && ls . | xargs -n 100 rm
rsync -a --delete empty/ test/
Последний способ - rsync с пустой директорией - оказался самым быстрым. Суть: создаёте пустой каталог empty/ и синхронизируете его с целевым test/:
mkdir empty
rsync -a --delete empty/ test/
▪️ Тест 1: 500 000 файлов в одной директории. Скрипт:
mkdir test
count=1
while [ $count -le 10 ]; do
touch test/file$count-{000..50000}
count=$(( count + 1 ))
done
Вывод: rsync уничтожил всё быстрее всех. rm -r test/* вылетает с ошибкой при большом числе файлов.
▪️ Тест 2: Иерархия: 50 000 директорий, по 100 файлов в каждой:
count=1
while [ $count -le 10 ]; do
mkdir -p test/dir$count-{000..500}
touch test/dir$count-{000..500}/file-{000..100}
count=$(( count + 1 ))
done
Вывод: в этом случае почти все методы сработали одинаково. Но если файлов ещё больше -
rsync снова выигрывает.🌟🌟🌟 Осторожно с rsync! Перепутаете местами source и destination - удалите к черту все полезное.
⭐️ Совет: скрипты выше можно использовать и для создания тестовой нагрузки на диск, например, при проверке производительности или мониторинга.
#linux #rsync
🧑💻 NetworkAdmin