Видео ролики бесплатно онлайн

Смотреть гиг видео

Официальный сайт osinform 24/7/365

Смотреть видео бесплатно

uscr 02.07.2011 19:29

Есть вопрос![РЕШЕНО] Обработать несколько миллионов файлов.

Здравствуйте. Есть каталог, в котором лежат около 5 миллионов файлов. Все они имеют название по шаблону: <�одинаковые для всех буквы>_<�дата создания><�разные цифры>. Нужно эти файлы скормить скрипту. Скрипт может есть файлы, которые лежат в определённом каталоге. Т.Е. задача сводится к тому, что бы перемещать файлы порциями (например, по 1000 штук) в другой каталог. Проблема в том, что при попытке как-либо взаимодействовать с этими файлами - всё виснет (что не удивительно). Что можно придумать?

UPD

Спасибо всем за предложеные способы. Всё попробую чуть позже. Сейчас к машине нет доступа.

Решение:


ls получает список ВСЕХ файлов не потому, что он тупой и вредный, а потому, что он хочет их отсортировать перед выводом. У команды ls есть ключ -U (unsorted). Так что ls -U | head -1000 отрабатывает (всего) за три секунды.


Тэги:
+ 4 -
Похожие Поделиться

transserg 02.07.2011 20:08 #
+ 1 -
ну если на С написать простую прожку которая будет дергать по 1000 файлов (или чуть больше) и отдавать скрипту. других вариантов пока не пришло в голову
uscr 02.07.2011 20:28 #
+ 0 -
Я не знаю С. Пробовал в питоне использовать os.walk() - это функция - итератор, написаная как раз на С. Но тоже подвисло всё.
transserg 02.07.2011 20:48 #
+ 1 -
подвисло на совсем или не дождался?
uscr 03.07.2011 13:39 #
+ 0 -
Ждал 20 минут. Это значит я не дождался, или "совсем подвисло"? :)
jh 03.07.2011 06:12 #
+ 1 -
видимо итератор пытается сразу полностью получить список файлов.
uscr 03.07.2011 13:39 #
+ 0 -
Ну... Он ведь итератор. Кажется, в том и фишечка, что не нужен ему весь список. Нет?
jh 03.07.2011 16:00 #
+ 1 -
думаю зависит от реализации.
вот есть range() который отдает сразу все объекты, если их много, то занимается много памяти.
есть xrange() который отдает объекты последовательно
uscr 03.07.2011 22:20 #
+ 0 -
Да. Думаю, тут есть завязка на саму ФС помимо всего прочего...
philosoft 02.07.2011 21:34 #
+ 0 -
ls | head -n1000
uscr 03.07.2011 13:40 #
+ 0 -
Хехе. Это попробовал в первую очередь. Помню фишечку с разрывом пайпа, но тут не сработало. Видимо, ls работает не "налету", а сначала всё таки получает список.
philosoft 03.07.2011 15:22 #
+ 1 -
сделай ls | wc -l. я пробовал вышеуказанный трюк с каталогом в котором было 760 тысяч файлов. etx4 дефолтные настройки, отработало ≈30 сек.

можно попробовать с find /path/ -type f -name 'шаблон' -print | head -n1000 find печатает на вывод файлеки по мере нахождения.
mealsforall 03.07.2011 21:04 #
+ 3 -
find /path/ -type f -name 'шаблон' -print | xargs скрипт
uscr 03.07.2011 22:13 #
+ 1 -
ls | wc -l
Всякие ухищрения с find -всё это зависает :(

Может глюк самой ФС?
mealsforall 04.07.2011 05:44 #
+ 0 -
Похоже на то. Как я ниже написал, find читает файлы последовательно и количество файлов ему всё равно должно быть.

Интересно, кстати, какой размер файла каталога.

ls -ld
philosoft 03.07.2011 16:02 #
+ 1 -
Похоже всё дело в реализации пайпов. Места у меня хватило только на 3 178 311 файлов. При использовании пайпа например в ls | head -n1000 оно хавает полгига и на эту операцию уходит 1 минута. (ext4, старый ide-hdd, 7200 rpm, 8Mb cache; каталог /tmp/site файлы по шаблону abcd_номерфайла, содержимое файлов - их номер). Пока проверяю что и как лучше сделать обычный ls в каталоге съел пока 40 мегов, продолжает медленно пожирать память, работает уже больше 2 минут, результата всё ещё нет )
uscr 03.07.2011 22:19 #
+ 0 -
Я, к сожалению, не знаю, чсколько там на самом деле файлов. Миллионы - это предположение. Система такая: ваершарк дампит трафик, нечто режет дамп на файлы. Один файл - один пакет. Эти файлы потом обрабатывает скрипт. Внезапно, скрипт оказался нерабочим, но замечено это было только через месяц. И весь месяц трафик дампился и резался...

Так что файлов там может оказаться и больше сотни миллионов.
philosoft 03.07.2011 16:27 #
+ 3 -
Могу предложить вот такую штуку (парсер лох, поэтому на пастбине). Работает молниеносно, памяти не жрёт, выдаёт по 1001 файлу или всё, что есть, если их меньше ☺
uscr 03.07.2011 22:14 #
+ 0 -
Спасибо, попробую.
iglezz 02.07.2011 22:03 #
+ 0 -
А если выбирать по маске <�буквы>_<�дата>*, повиснет или нет?
Если нет, то начиная от сегодняшней даты можно пробежаться циклом в прошлое, откручивая на каждом шаге один день.
uscr 03.07.2011 13:41 #
+ 0 -
Попробую.
xT 02.07.2011 23:14 #
+ -1 -
приведи примеры как ты с ними взаимодействуешь и на каком моменте все виснет
uscr 03.07.2011 13:42 #
+ 1 -
Всмысле? Виснет на самом первом шаге - получение списка файлов.
mealsforall 03.07.2011 03:41 #
+ 2 -
Так ведь xargs как раз для этого?
uscr 03.07.2011 13:41 #
+ 0 -
Ну а что передать в xargs?
mealsforall 03.07.2011 20:59 #
+ 2 -
Скрипт и передать, который будет обрабатывать файлы. А xargs будет скармливать скрипту найденные файлы маленькими порциями.
uscr 03.07.2011 22:15 #
+ 1 -
Хм. Судя по минусу, я спросил очень глупу вещь. Но разве xargs не работает в пайпе? Типа: find blablabla|xargs blablabla?
mealsforall 04.07.2011 05:41 #
+ 1 -
Компенсировал минус на 0. :)
Да, правильно -- xargs так и работает, но find совершенно не должен зависать. Очень странно, что find зависает, потому что find не читает все файлы скопом -- видимо, всё-таки глюк файловой системы. Я бы сделал fsck, вдруг с катологом что-то.
ananas 03.07.2011 19:03 #
+ 2 -
http://pastebin.com/9nCAWNqk

как использовать, думаю, сам догадаешься
uscr 03.07.2011 22:16 #
+ 0 -
И это попробую. Спасибо.
sKwa 04.07.2011 03:19 #
+ -1 -
Попробуй, как вариант, воспользоваться утилитой dd. Она вроде отличается от прочих тем что обращается именно к {байтам,блокам,секторам} и т.п. в отличии стандартных утилит, которые вроде открывают файловые потоки.
Если знаешь точное имя какого-нибудь файла попробуй с помощью dd сделать дубликат по абсолютному пути. Если выйдет, но с регулярными выражениями не выйдет (что вполне возможно), значит придётся подстановкой создавать строковую переменную и подставлять в dd или будем думать как решить проблему.
cez 06.07.2011 18:03 #
+ -1 -
find -t file -exec lol %;
xT 22.08.2011 13:32 #
+ 1 -
Увидел сегодня вот такую статью на эту тему : ) ап

В хорошем качестве hd видео

Онлайн видео бесплатно