klondike

Корпоративный блог студии "Клондайк"

Клондайк интернет маркетинга - WEB, SEO, SMM


Previous Entry Share Next Entry
Klondike_yellow
klondike

Как удалить миллионы файлов в linux?

Проблемам достаточно известная, и самое главное не так проста как кажется. Практическим опытом делится Таран Виктор, технический директор студии Клондайк.

Симптомы


  • Невозможно сделать ls в папке, зависает терминал.

  • Невозможно удалить так же в MC, по той же причине невозможно зайти в папку.

  • Консольные утилиты отказываются удалять файлы, поскольку Argument list too long.

  • find ls и т. д. так же выдают 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

milion-linuks

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

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

Естественно, после формирования файла с командами нам потребуется их исполнить:

Nice -20 sh find.txt


Источник http://klondike-studio.ru/blog/vse_pro_hosting/55.php


?

Log in

No account? Create an account