Как быстро удалить огромное количество файлов в каталоге
Не редко у администраторов возникает задача быстрого удаления огромного количества файлов на Linux или FreeBSD. И как правило все используют классический способ с использованием rm -rf /directory/
, но когда в каталоге 900 тыс. файлов, то удаление такого каталога с помощью rm
может растянуться на долгие часы.
Более быстрый способ удаления — это синхронизация удаляемого каталога с пустым через rsync
.
Суть простая — нужно rsync
-ом положить пустой каталог в тот, который нужно очистить, с опцией –delete
.
Итак, создаём пустой каталог:
mkdir /tmp/empty
Если у нас всё плохо и на диске создать каталог уже нельзя (закончилось место или inode), то нас всегда спасёт /dev/shm (на Linux):
mkdir /dev/shm/empty
Назначаем на каталог /tmp/empty те же права, которые сейчас у нас на том каталоге, который мы собираемся чистить (иначе каталог станет принадлежать root и туда никто потом не сможет писать), например:
chown www-data:www-data /tmp/empty chmod 755 /tmp/empty
Начинаем всё удалять:
rsync -a --delete /tmp/empty/ /path/to/big/dir/
На этом все, ждем, когда каталог опустеет.