Быстро удалить огромное количество файлов в каталоге

Не редко у администраторов возникает задача быстрого удаления огромного количества файлов на 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/

Last updated