Удалить миллионы файлов в linux

Как удалить миллионы файлов в linux? Проблемам достаточно известная и, самое главное, не так проста как кажется. Симптомы:

  • Невозможно сделать ls в папке, зависает терминал
  • Невозможно удалить так же в MC по той же причине невозможно зайти в папку.
  • Консольные утилиты отказываются удалять файлы поскольку Argument list too long
  • find ls и т. д. так же выдают Как удалить миллионы файлов в linux Argument list too long

При наличии в одном каталоге нужных нам файлов и ненужных, мы вынуждены удалять файлы по маске, и тут кроется основная проблема большинство консольных утилит не в состояние выдать вам столь весомый список, а следствие этого и работать с ним. Первым отваливается rm который вам заявляет что слишком большой массив данных.

rm  -f /tmp/sess_*

При определенном условие все еще отрабатывает такой хитрый вариант как

find  /tmp/sess_*  -type f –exec  rm -v {} \;

Оптимизировав его мы можем добавить еще пару сотен тысяч файлов и опять же у нас появится та же проблема, слишком большой массив данных.

find /tmp/sess_*  -delete

Основная проблема в том, что мне нужно удалить именно данный файл, а не всю папку или все файлы находящиеся в ней. В результате для удаления 14 000 000 файлов мне потребовалось сделать ход конем в первую очередь отказаться от регулярок, поскольку они требуют построения всего дерева. И отказаться от любых утилит, составляющих весь список в пользу построчного построения. Используем тот же find

find  /tmp  –type f > /home/find.txt

Далее, после получения файла, в моем случае он было около 200 мегабайт, подставляем ко всем

/tmp/sess* ---> rm –f /tmp/sess

Естественно, вариант смотрится достаточно страшно, и не оптимально. Но он помог мне решить задачу которая не поддалась никаким другим вариантам.

Самое главное в find не должно быть никаких регулярок! В противном случае он так же откажется работать, все что нам потребуется отсортируем уже в файле. Ну и напоследок не доводите до такого, в моем случае не удалялись сессии. Естественно, после формирования файла с командами нам потребуется их исполнить


Оставить комментарий