Удаление дублей из архивов по 1000 книг.

Есть такая программа myhomelib. Для работы использует архивы либрусека. В этих архивах примерно 20% дублей. В связи с этим возникает вполне закономерное желание эти дубли убрать. pkn написал для этой цели скрипт. Скрипт перловый.
Перл можно найти тут, скрипт тут. Скрипт создает копии зип архивов, с полным сохранением структуры и имен файлов, но без дублей.
Как его запустить?
Устанавливаем перл. По умолчанию ставится C:\Perl\
Скачиваем и копируем скрипт в папку C:\Perl\bin\. Переименовываем его в kop-inp-zip-dedead.pl
Качаем списки и распаковываем их в папку папку librusec_update_lang, в корень диска C:
Копируем архивы либрусека в E:\Lib.rus.ec - у меня так, если у вас по другому, нужно в параметрах скрипта прописать другой путь. В пути не должно быть пробелов и русских букв.
Жмем пуск\выполнить, там пишем cmd и жмем enter.
Откроется командная строка.
Там пишем cd c:\ - это место куда будут копироваться архивы.
После этого выполняем следующую команду C:\Perl\bin\perl5.8.0.exe C:\Perl\bin\kop-inp-zip-dedead.pl C:\librusec_update_lang E:\Lib.rus.ec ru
Где C:\Perl\bin\perl5.8.0.exe - путь к exe перла.
C:\Perl\bin\kop-inp-zip-dedead.pl - путь к скрипту.
C:\librusec_update_lang - путь к спискам из myhomelib.
E:\Lib.rus.ec - путь к архивам либрусека.
ru - оставить только русские книги. Если написать all - оставит все языки.
Идем пить чай. Работа скрипта, в зависимости от мощности вашего компьютера, займет 20 - 30 минут. До обработки, архивы либрусека занимают 18.4 Гб. После обработки 13.8 Гб.

Комментарии

Bullfear написал:

Скопировать при работающем скрипте не получилось, поэтому выкладываю скриншот.

Странно... параметры ОК, вроде должно было нормально сработать... правда, не видно нормально ли загрузились SQL-таблицы... нельзя ли полностью вывод скрипта увидеть?

Bullfear написал:

Существенно. Представь - лежат архивы в папке. В myhomelib все настроено, и т.д. На винте свободна пара гигабайт. Сделал один раз ярлык и при обновлении архивов либрусека его запускаешь - он чистит лишние дубли, иностранцев и т.п., так как в старых архивах некоторое число файлов постоянно заменяется свежими версиями. После работы скрипта никуда не надо лезть, ничего не надо переименовывать(если получится подружить -dow с фаерволом ;).

Убедил. Как руки дойдут - сделаю.

Изволь. Распаковка таблиц заняла чуть больше 20 минут. Дальше уже пошло убиение невиновных файлов, посему скрипт был безжалостно остановлен :) И так уже половину придется перекачивать.

Кстати по поводу sql... А работать по спискам myhomelib скрипт разучился? Если да, то жаль - было намного быстрее.

Bullfear написал:
Изволь. Распаковка таблиц заняла чуть больше 20 минут.

Распаковка - это секунды, там парсинг длинный. Но это от компупера зависит, у меня это три минуты занимает :). Но учту, спасибо, если будет возможность - попробую эту часть ускорить.

Bullfear написал:
Дальше уже пошло убиение невиновных файлов, посему скрипт был безжалостно остановлен :) И так уже половину придется перекачивать.

Ну извини... я честно предупреждал: "НЕ пользуйтесь этой опцией, если не уверены." ;)

Bullfear написал:
Кстати по поводу sql... А работать по спискам myhomelib скрипт разучился? Если да, то жаль - было намного быстрее.

Не, это вряд ли получится. Я много пользуюсь частями именно этого скрипта, с SQL-таблицами, и поддерживать два формата - эт я не потяну.

Теперь по сути: похоже, там баг в скрипте. При единственном фильтре "по языку ru" он нашел всего 5409 желаемых (wanted) книг из 123760. Не может быть чтобы в таблицах было всего 5 тысяч книг на русском. И у меня такой же примерно результат, даже ещё меньше, так что это не разница в Перле или в SQL-таблицах, а баг в скрипте. Буду искать, как только дойдут руки. Постараюсь не затягивать, но прямо сейчас - не могу.

pkn написал:
Но это от компупера зависит, у меня это три минуты занимает :)

Ну дык на настольном и у меня будет около 3-х минут. Ты на ноуте пораспаковывай :Р
pkn написал:
При единственном фильтре "по языку ru" он нашел всего 5409 желаемых (wanted) книг из 123760.

Тоесть косяк в единственном фильтре или именно в фильтре по языку?
pkn написал:
Ну извини... я честно предупреждал: "НЕ пользуйтесь этой опцией, если не уверены." ;)

*обиженным голосом* Но ты не добавлял "... что в скрипте нет бага" :Р
pkn написал:
Буду искать, как только дойдут руки.

Ясно, спасибо. Бум ждать, благо сейчас либрусек работает и это не так критично ;)

Bullfear написал:

*обиженным голосом* Но ты не добавлял "... что в скрипте нет бага" :Р

Баг в скрипте есть всегда. Это аксиома.

kop-librusec-dedead верисия 0.4.3 - прицеплена к посту.
Изменения:
1. Пофиксен злобный баг. Предыдущими версиями не пользоваться, они глюкавые на всю голову!
2. Добавлена опция -testrun : Делать всё как настоящее, но не писать/стирать никаких zip-архивных файлов.
3. Добавлена возможность перезаписывать поверх исходных файлов. Для этого надо чтобы -do (dirout, выходной директорий) показывал туда же где лежат исходные зипы (dirzip), и присутствовала опция -removeoriginals.

Спасибо, щас потестим :)

Меня терзают смутные сомнения... На первый взгляд все нормально, однако почти в каждом архиве скрипт находит примерно 250-300 дублей. Так и должно быть? Архивы уже были обработаны старой (безглючной) версией скрипта.
Wanted total 96695
Books total 123760
to be squeezed 27065
Или он просто повторно обьединичивает единички? Тогда все в порядке.
Из замеченного: быстрее стали грузится таблицы, это гуд :)
А вот еще что.
WARNING: Bad member name: "Ketrin_A_List_Etika_bl**stva.fb2" zipf="16988-117987"
C этими файлами можно что-то сделать?

Bullfear написал:

Или он просто повторно обьединичивает единички?

Повторно объединичивает.

Bullfear написал:

Из замеченного: быстрее стали грузится таблицы, это гуд :)

Это тебе показалось :) там ничего не делалось.

Bullfear написал:

А вот еще что.
WARNING: Bad member name: "Ketrin_A_List_Etika_bl**stva.fb2" zipf="16988-117987"
C этими файлами можно что-то сделать?

АХЕЗ. Звёздочки в имени разрушают перловые regexp-ы. Я пока не могу научиться как бы их правильно сравнивать.

pkn написал:
Это тебе показалось :) там ничего не делалось.

Странно. Тем не менее факт. Тогда одно из трех:
- Я сонный, поэтому думаю медленнее :)
- Они эээ... Закешировались виндой, ибо ноут уже недели две не перезагружался.
- Что третье? Говорю же - сонный я :Р

pkn написал:
Bullfear написал:

А вот еще что.
WARNING: Bad member name: "Ketrin_A_List_Etika_bl**stva.fb2" zipf="16988-117987"
C этими файлами можно что-то сделать?

АХЕЗ. Звёздочки в имени разрушают перловые regexp-ы. Я пока не могу научиться как бы их правильно сравнивать.

Можно экранировать переменную - /^\Q$membername\E$/
А можно использовать строковое сравнение вместо regexp (должно быть быстрее) - grep {$_ eq $membername} @FN_G;

lankier написал:
pkn написал:
Bullfear написал:

А вот еще что.
WARNING: Bad member name: "Ketrin_A_List_Etika_bl**stva.fb2" zipf="16988-117987"
C этими файлами можно что-то сделать?

АХЕЗ. Звёздочки в имени разрушают перловые regexp-ы. Я пока не могу научиться как бы их правильно сравнивать.

Можно экранировать переменную - /^\Q$membername\E$/
А можно использовать строковое сравнение вместо regexp (должно быть быстрее) - grep {$_ eq $membername} @FN_G;

Спасибо! Перловковар из меня тот ещё...

Страницы

X