Удалить миллионы файлов в 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 не должно быть никаких регулярок! В противном случае он так же откажется работать, все что нам потребуется отсортируем уже в файле. Ну и напоследок не доводите до такого, в моем случае не удалялись сессии. Естественно, после формирования файла с командами нам потребуется их исполнить
Оставить комментарий
Комментарии (0)