Вы здесьУдаление дублей из архивов по 1000 книг.
Опубликовано вт, 20/01/2009 - 15:27 пользователем Bullfear
Есть такая программа myhomelib. Для работы использует архивы либрусека. В этих архивах примерно 20% дублей. В связи с этим возникает вполне закономерное желание эти дубли убрать. pkn написал для этой цели скрипт. Скрипт перловый.
|
Вход на сайтПоиск по блогам и форумамUser menuПоследние комментарии
Саша из Киева RE:Кто сможет раздобыть и оцифровать нужные мне книги? 1 день
Саша из Киева RE:Избранное 1 день PipboyD RE:Подайте бедному копеечку на книжку с литреса... 1 день Alligatoreader RE:Багрепорт - 2 2 дня fedor.de RE:Отображение страницы Librusek 5 дней Isais RE:Чиполь Сергеевич Наглецов - Огненный дракон [СИ] 6 дней kopak RE:Таинственная личность админа Флибусты 1 неделя blahblahblah2024 RE:Беженцы с Флибусты 1 неделя sem14 RE:Что читать о блокаде Ленинграда. Подборка книг 1 неделя sem14 RE:Михаил Юрьевич Берг - Андеграунд. Итоги. Ревизия_5 2 недели TaKir RE:Валерия Сергеевна Черепенчук А. Н. Николаева - Мифы... 3 недели Oleg V.Cat RE:B343695 Александр. Книга 1 3 недели Isais RE:Калибрятина/Самиздатина 3 недели md2k15 RE:Относительно Вархаммер 40 000 3 недели tvnic RE:"Коллектив авторов" 4 недели SergL197 RE:Регистрация 1 месяц ejik.v RE:Viva Stiver! 1 месяц RedRoses3 RE:Флибуста конец? 1 месяц Впечатления о книгах
viks864 про Flow: Асоциален (Боевая фантастика, Киберпанк, ЛитРПГ)
24 11 Кто то знает что значит псевдоним аффторя ? Ascold - это же - жопный холод ? с английского Оценка: плохо
viks864 про Flow: Академия магоубийц (Боевая фантастика, ЛитРПГ, Самиздат, сетевая литература)
24 11 Гг поступает в элитную академию защитников человечества - номер 2 из 5 . Принимают лучших из лучших , отбор дикий . Гг оказался в 1% магов - редкость несусветная. И тут же - поступившие с ним гопники (тоже - лучшие из ……… Оценка: плохо
Олег Макаров. про Шоу должно продолжаться!
23 11 Если вы любите попаданцев... Если вам интересна музыка... Если вы не считаете, что каждый уважающий себя и читателя попаданец обязан спасти СССР и по дороге жёстко разобраться с Горбачёвым, Ельциным, евреями и велосипедистами.... то стоит попробовать эту серию
Олег Макаров. про Черный дембель
23 11 Неплохо. Простенько, но интересненько. Местами чуть затянуто, но не мешает. Короче, если вам нечего читать, то стоит попробовать.
Олег Макаров. про Сухов: Первый квест [СИ] (Фэнтези, ЛитРПГ, Самиздат, сетевая литература)
23 11 Написано хорошо, но мне не нравятся такие книги. Любители литрпг дерзайте. Оценка: хорошо
Oleg68 про Кобен: Укороченный удар [Drop Shot ru] (Крутой детектив)
22 11 Хорошее продолжение серии о спортивном агенте-детективе. Оценка: отлично!
decim про Галинакс: Как украсть миллион. Жизнь и удивительные приключения Бенвенуто Челлини, гения Возрождения (Историческая проза, Исторические приключения, Биографии и Мемуары)
22 11 Аноним-самопальщик выспался на "Жизни Бенвенуто Челлини, написанной им самим", переведя с русского языка 19-го века(вы же не думаете, что со средневекового итальянского?) на жаргон журок и эскортниц.О вторых он сведущ, словно сам шлюхой работал. Нечитаемо.
Лысенко Владимир Андреевич про Коровин: После «Украины» (Политика, Публицистика)
22 11 Надо же такое придумать, нечитаемо. Оценка: нечитаемо
Oleg V.Cat про Коровин: После «Украины» (Политика, Публицистика)
21 11 Любому насекомоядному понятно, что эта война устраивает практически всех. Поэтому заканчивать её таки придется тем, кого она не устраивает.
udrees про Мэтьюз: Как остановить травлю? Помогите ребенку справиться с обидчиками в интернете и школе (Психология, Педагогика)
21 11 Легко написанная книга про проблему буллинга детей в школах, снабжена кучей смешных иллюстраций. Описывает опыт, в основном, я так понял, из Австралии. Есть куча советов как работать с жертвами, как работать с мучителями, ……… Оценка: неплохо |
Комментарии
Отв: Удаление дублей из архивов по 1000 книг.
Я могу попробовать. Но это будет небыстро - пока что всё свободное время уходит на возню с библиотекой Пухлого. Если хочешь, прицепи к посту списки myhomelib, архивы Либрусека у меня, естественно, есть.
Отв: Удаление дублей из архивов по 1000 книг.
http://home-lib.net/update/librusec_update.zip
Отв: Удаление дублей из архивов по 1000 книг.
Кажется, работает. Пробую прикрепить к посту.
Ага, вроде прикрепилось. Скрипт перловый. Принцип работы и как запускать примерно так же, как описано вот тут: http://lib.rus.ec/node/111496#comment-21747
В Либрусечьих архивах по тысячам (112214 файла внутри зипов) отлавливает: Dead: 17946
Отв: Удаление дублей из архивов по 1000 книг.
Спасибо. Теперь вопрос. Как должна выглядеть командная строка для его запуска? Как я понял ему надо прописать три вещи: путь к спискам, путь к архивам либрусека и путь куда это сохранять. В каком порядке это прописывать?
Вопрос номер два.
Что получим на выходе - копии архивов, но уже без левых файлов или просто кучу распакованных файлов?
Отв: Удаление дублей из архивов по 1000 книг.
В командной строке скрипту нужно сказать две вещи: директорий откуда брать (распакованные) майхоумлибовские INP-файлы; и директорий откуда брать либрусечьи ZIP-файлы, именно в этом порядке. Результат скрипт пишет в текущий директорий.
Результат - это копии входных либрусечьих зипов, но без мертвых файлов внутри, и поименованные по схеме: входной "1-1009.zip" становится "1-1009.dedead.zip". Если выходной файл уже существует, скрипт его перезаписывать не станет, скипнет и сообщит об этом.
Если запустить скрипт без параметров в командной строке, он скажет кратенькую напоминалку.
Пример:
U:\librusec-original-zips-by1000-dedead>C:\Perl\bin\perl.exe U:\perlscripts\kop-inp-zip-dedead.pl U:\myhomelib F:\librusec-original-zips-by1000
Здесь:
"U:\librusec-original-zips-by1000-dedead" - текущий директорий, сюда скрипт будет результат писать.
"C:\Perl\bin\perl.exe" - вызов интерпретатора Перла.
"U:\perlscripts\kop-inp-zip-dedead.pl" - файл скрипта, передаётся интерпретатору Перла.
"U:\myhomelib" - директорий откуда скрипту брать (распакованные) майхоумлибовские INP-файлы
"F:\librusec-original-zips-by1000" - директорий откуда скрипту брать либрусечьи ZIP-файлы
Отв: Удаление дублей из архивов по 1000 книг.
Прописал, запустил. Не в курсе, чего ему надо?
Отв: Удаление дублей из архивов по 1000 книг.
Там не всё видно (чем картинку, лучше скопипейстить его вывод), но судя по выглядывающему краешку скрипт не нашёл ни одного зипа. Или ни одного мембера (файла) внутри зипов, но это менее вероятно. Скопипейсти вывод полностью, влкючая командную строку, тогда точнее можно будет сказать.
Как скопиейстить из командного окна Windows: правая кнопка->Mark, мышкой выделить всё что нужно, нажать Enter (или ещё раз правую кнопку). Потом в нужном окошке правая кнопка->Paste.
Отв: Удаление дублей из архивов по 1000 книг.
C:\>C:\Perl\bin\perl5.8.0.exe C:\Perl\bin\kop-inp-zip-dedead.pl C:\Program File
\MyHomeLib\LIBRUSEC_INP E:\lib
-------------------------------------------------------
cwd=C:/
Drive="C" Program name: "C:\Perl\bin\kop-inp-zip-dedead.pl" Run date: 07:58:04
/30/2009
DEBUG: arg[ 0]="C:\Program"
DEBUG: arg[ 1]="Files\MyHomeLib\LIBRUSEC_INP"
DEBUG: arg[ 2]="E:\lib"
DEBUG:[ 0] dir="C:\Program"
DEBUG:[ 1] dir="Files\MyHomeLib\LIBRUSEC_INP"
DEBUG:[ 2] dir="E:\lib"
DEBUG:[ 0] type="zip"
-------------------------------------------------------
Building [inp ] files list completed. Full list contains 0 files. Elapsed=0.000
00 seconds.
-------------------------------------------------------
Building [zip ] files list completed. Full list contains 0 files. Elapsed=0.000
00 seconds.
-------------------------------------------------------
Processing dir "Files\MyHomeLib\LIBRUSEC_INP", testing 0 zips...
DEBUG:koplib_test_zipfilelist: 0 zips given, 0 zips tested OK, 0 members.
Processing dir "Files\MyHomeLib\LIBRUSEC_INP", Found 0 zips, tested OK 0 zips,
ontent 0 members.WARNING: -----------------------------------------------------
------
+
------------------------------------------------------------
+
[ 0 of 0] WARNING_CALL zipff="" filef=""
WARNING: FATAL ERROR: Illegal division by zero at C:\Perl\bin\kop-inp-zip-dedea
.pl line 204.
FATAL ERROR: Illegal division by zero at C:\Perl\bin\kop-inp-zip-dedead.pl line
204.
[ 0 of 0] WARNING_CALL zipff="" filef=""
FATAL ERROR: Illegal division by zero at C:\Perl\bin\kop-inp-zip-dedead.pl line
204.
00 204 main::Die C:\Perl\bin\kop-inp-zip-dedead.pl
WARNING: 00 204 main::Die C:\Perl\bin\kop-inp-zip-d
dead.pl
00 204 main::Die C:\Perl\bin\kop-inp-zip-dedead.pl
[ 0 of 0] WARNING_CALL zipff="" filef=""
[ 0 of 0] zipff=""
aut_from_zip_fname_G=""
autf_from_zip_fname_G=""
auti_from_zip_fname_G=""
elapsed=0.015625
Отв: Удаление дублей из архивов по 1000 книг.
Понятно. Вот это, выделенное жирным (я также добавил "s" в "Files", видимо пропущена при копипейсте): C:\Program Files\MyHomeLib\LIBRUSEC_INP надо написать в кавычках, вот так: "C:\Program Files\MyHomeLib\LIBRUSEC_INP", потому что там пробел есть в имени директория Program Files.
Отв: Удаление дублей из архивов по 1000 книг.
Скопировал все, посмотрел на это и понял в чем косяк :) Короче скрипт не понимал что такое "program files". После перемещения myhomelib в корень С:, все заработало.
UPD. Написал и увидел твой коментарий. Ну тоже вариант :)
Отв: Удаление дублей из архивов по 1000 книг.
От первого архива осталось 30 мегабайт... В этом что-то есть :)
Отв: Удаление дублей из архивов по 1000 книг.
Есть, но не так много, как кажется :) Дальше дублей будет всё меньше, на круг - удаляется процентов 20, не больше.
Отв: Удаление дублей из архивов по 1000 книг.
Такс. Помоему скрипт слегка глючит, я могу ошибаться, но похоже он удаляет некоторые вещи, которые удалять бы не надо и наоборот... Сходу - автор Аарон - При нажатой кнопке "скрыть удаленное" у него одна книга, при отжатой три. После чистки открываются все три.
Олди Генри Лайон "Реквием по мечте" - кнопка "скрыть удаленное" нажата, книга не открывается.
Отв: Удаление дублей из архивов по 1000 книг.
MyHomeLib извлекает файлы из архива не по имени, а по номеру. после удаления номера ясное дело поплыли. нужно теперь базу обновить, соотвествующие списки лежат здесь: http://forum.home-lib.net/viewtopic.php?p=2516#p2516
Отв: Удаление дублей из архивов по 1000 книг.
Так... об этом я не подумал. Сделаю другой вариант скрипта, который вместо удаления из зипов мертвых файлов будет заменять их на файлы размером в один байт, так и размер уменьшится, и нумерация сохранится.
Update: Сделал версию с объединичением размера, ещё диагностики по мелочи добавил, прикрепил к посту.
Кстати, заметка для отметки: прикрепление файла к посту не срабатывает, если поле "Пояснение к файлу:" оставить пустым.
Отв: Удаление дублей из архивов по 1000 книг.
(подумав) Bullfear, протестируй эту версию, пожалуйста. У меня под рукой нет MyHomeLib, протестировать не могу, а там тоже может быть глюк - не факт, что процедура замены файла вставляет новый единичного размера файл точно на место старого в зипе. Если не на место, а добавляет в конец - то нумерация всё равно нарушится и в MyHomeLib тоже будут глюки.
Отв: Удаление дублей из архивов по 1000 книг.
на первый взгляд все работает хорошо.
Отв: Удаление дублей из архивов по 1000 книг.
Myhomelib не ругается, это гуд. Но есть несколько "кривых" файлов...
List of 18 BAD members:
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/108296-109376.zip Member:Aleeksy_Alekseevic
h_Glushanovskiy_Stezya_charodeya.fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/108296-109376.zip Member:Aleksey_Alekseevic
h_Glushanovskiy_Stezya_charodeya.fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/109377-110395.zip Member:Hermann_Hesse_Sidd
hartha .fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/109377-110395.zip Member:German_Gesse_Narzi
├Я_und_Goldmund .fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/112398-113759.zip Member:Maykl_Krayton_Time
line.fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/121102-122247.zip Member:Lev_Sergeevich_Yak
ovlev_ .fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/121102-122247.zip Member:Lev_Sergeevich_Yak
ovlev_Romantichnyiy_nash_imperator .fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/121102-122247.zip Member:Igor_Malin_ZAKON_B
OZhIY.fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/122248-123010.zip Member:E_V_Senina_KULTURN
YiY_RELYaTIVIZM.fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/122248-123010.zip Member:R_N_Volkoslavskiy_
Suschnost_ikonopochitaniya.fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/122248-123010.zip Member:Aleksandr_Volkov_T
ayna_zabroshennogo_zamka.fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/122248-123010.zip Member:Aleksandr_Volkov_S
em_podzemnyih_koroley.fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/122248-123010.zip Member:Aleksandr_Volkov_Z
heltyiy_tuman.fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/122248-123010.zip Member:D_A_Kuznetsov_O_ch
em_umolchal_vash_uchebnik_Pravda_i_vyimyisel_┬аv_teorii_evolyutsii.fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/122248-123010.zip Member:Ellet_Vaggoner_Opr
avdavshis_veroyu._Kommentariy_na_Poslanie_ap._Pavla_k_Rimlyanam.fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/122248-123010.zip Member:Ellet_Vaggoner_Rad
ostnyie_vesti_Kommentariy_na_Poslanie_ap._Pavla_k_Galatam.fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/122248-123010.zip Member:Irvin_U_┬аLattser_
V_POISKAH_MORALNOGO_ABSOLYuTA_Sravnitelnyiy_analiz_eticheskih_sistem.fb2
NOT_FOUND_IN_INPS:File:E:\Lib.rus.ec/125473-126782.zip Member:Zhurnal_Krasnaya_B
urda__Krasnaya_Burda_sbornik_1997-98_godov_.fb2
У всех этих файлов в имени есть квадратик. Подозреваю, что косяк в списках, хотя кто знает...
Кстати, небольшое пожелание. В следующих версиях скрипта(для убивания иностранцев :)), сделай пожалуйста так, чтобы архивы имели те же имена, что и оригинальные файлы. Переименование в dedead только вносит лишние проблемы(ибо копируется все равно в другую папку). Для себя решил эту проблему так - открыл вордом твой скрипт, нашел там строчку ".dedead.zip" и заменил на ".zip". Подозреваю, что это было примерно как с ломиком в истребитель, но лучше ничего не придумал :)
Отв: Удаление дублей из архивов по 1000 книг.
Уважаемый pkn, а можно еще добавить удаление книг не на русском языке - это еще процентов 10-15.
Отв: Удаление дублей из архивов по 1000 книг.
"Добавить" это в скрипт dedead не получится, потому что майхоумлибовские INP-файлы не несут информации о языке книги. Можно сделать отдельный скрипт. Но он будет способен удалить, или, лучше, объединичить размер внутри либрусечьих зипов, только fb2-файлов. Потому что для файлов других типов язык, опять же, неизвестен. Нерусских fb2-файлов, кажется, не так уж много, я не уверен - нужно ли это.
Отв: Удаление дублей из архивов по 1000 книг.
в принципе, можно поправить генератор inp-ов, что бы язык тоже указывался - в строке добавится еще один параметр. но вот насколько это нужно ...
Отв: Удаление дублей из архивов по 1000 книг.
Если бы генератор inp-ов обрабатывал и не-fb2 файлы, то, пожалуй, имело бы смысл, но, если я правильно понимаю, он работает только с fb2?
И кстати - откуда генератор inp-ов берёт информацию что данная книга удалена?
Отв: Удаление дублей из архивов по 1000 книг.
не правильно :-)
генератор работает с любыми файлами. если ему подсунуть usr* он сделает списки не-fb2
из базы либрусековской, там поле есть соответсвующее.
Отв: Удаление дублей из архивов по 1000 книг.
О. Может, тогда и правда язык добавить, если, конечно, это несложно и его есть откуда взять?
Эх, вот бы и мне научиться напрямую с либрусековскими SQL-таблицами работать...
Отв: Удаление дублей из архивов по 1000 книг.
Отв: Удаление дублей из архивов по 1000 книг.
Это не совсем то... PHP, если я правильно понимаю, исполняется http-сервером, а сервера у меня нет и заводить его мне крайне не хочется. Мне бы научиться лазить в SQL-таблицы из Перла. В принципе, модули для этого в Перле, кажется, есть (а чего в Перле нет?), но это ж пару тысяч страниц учебников сгрызть надо... или хоть понадкусывать... ох-хо-хонюшки, да когда ж эта учёба кончится... уж пенсия не за горами, а всё грызть и грызть.
Отв: Удаление дублей из архивов по 1000 книг.
Отв: Удаление дублей из архивов по 1000 книг.
в понедельник сделаю.
Отв: Удаление дублей из архивов по 1000 книг.
сделал: http://home-lib.net/update/librusec_update_lang.zip язык - последний параметр.
новых архивов (добавленных вчера) там пока нет, я их еще сам не скачал.
Отв: Удаление дублей из архивов по 1000 книг.
Сделал новую версию dedead-скрипта, прикреплена к этому посту.
Должна по идее работать и со "старыми" INP-файлами (без языка), и с новыми, с языком.
Язык скрипту нужно указывать третьим параметром в командной строке.
all - означает что все живые файлы будут записаны в выходной файл, на любом языке.
ru - означает что только живые файлы на русском языке будут записаны в выходной файл.
en - только живые файлы на английском,
... нуитеде.
Отв: Удаление дублей из архивов по 1000 книг.
Оп-паньки... скачал сейчас переделанные фб2-архивы по тысяче, 133502-134893 и 134894-136118, заглянул внутрь, а у них внутре filename из одного номера ID состоит. А dedead-скрипт-то как раз по filename ищет соответствующую строчку в INP-файлах... Если генератор INP-ов в filename (6-е поле) пишет именно filename из либрусечьего зипа, то будет скрипт работать и так. А вот если нет, то придётся что-то придумывать...
Отв: Удаление дублей из архивов по 1000 книг.
все уже учтено.
только вот я вчера не заметил, что 135502-*.zip изменился. сейчас перекачаю, и обновлю списки (оба комплекта).
Отв: Удаление дублей из архивов по 1000 книг.
списки обновил.
Отв: Удаление дублей из архивов по 1000 книг.
Я думаю Вы уже заметили, что Larin поменял имена файлов в новых архивах, может есть смысл в еще одном скрипте для переименовывания файлов в старых архивах, согласно их ID в базе?
Отв: Удаление дублей из архивов по 1000 книг.
Я не очень понимаю в чём смысл.
Отв: Удаление дублей из архивов по 1000 книг.
смысла нет. к тому же многие имена файлов в базе содержат левые символы, что приводит к проблемам при распаковке. ИМХО, замена на номера - это правильный ход.
Отв: Удаление дублей из архивов по 1000 книг.
Так я про это и говорю - заменить левые символы на номерные ID, но согласен, это лишнее, я вообще не уверен что удалять дубликаты из архивов будут (смогут) хотя бы 20% пользователей MyHomeLib.
Отв: Удаление дублей из архивов по 1000 книг.
лично я пользуюсь :-)
сделал себе облегченный вариант для ноута, там разница в 5 гиг заметна.
спасибо pkn за скрипт!
kop-librusec-dedead - очень новая версия.
По сравнению с kop-inp-zip-dedead изменено очень сильно, практически это другой скрипт, поэтому другое название - kop-librusec-dedead. Основные характеристики:
1. Скрипт теперь не нуждается в INP-файлах от koreec, а работает напрямую с SQL-таблицами Либрусека.
2. Если файлов с SQL-таблицами у Вас нет, скрипт может сам их сгрузить прямо с Либрусека.
3. Неограниченный фильтр по формату (типу файлов) позволяет извлекать нужное и из не-фб2 либрусечьих зипов.
4. Неограниченный фильтр по языку.
5. Обработка mistyped - файлов с неправильно указанным форматом.
6. Добавлен приличный (ну, по Перловым меркам) хелп.
Отв: kop-librusec-dedead - очень новая версия.
Во, и тут же следующая версия.
Версия 0.3.3. Добавлено: фильтр по автору фб2-файла; фильтр по версии фб-2 файла.
Таким образом такой вот запуск (см. EXAMPLES в хелпе):
kop-librusec-dedead.pl -dow -del C:\zi -f fb2 -fb2a rusec -fb2v 1.0 1.0
делает из зипов выборку непроапгрейденных Либрусек-китовских файлов.
Отв: kop-librusec-dedead - очень новая версия.
Эмм... Что там насчет хэлпа? Мну наивный думал, что если запустить скрипт без параметров, оно покажет хэлп. Зря думал. Ну да ладно. Расковырял я его вордом и сложилась у нас патовая ситуация - скрипт не понимает русского, а я английского :) Напиши пожалуйста хэлп по русски, что-то мне подсказывает, что не я один такой неграмотный.
Кстати пожелание для следующей версии. Сделай пожалуйста, чтобы папка, куда будут записываться архивы, задавалась параметром. Тогда можно будет сделать ярлык, чтобы не вбивать каждый раз команды. Если его сделать сейчас, архивы будут складываются в папку с перлом, что не очень удобно.
Отв: kop-librusec-dedead - очень новая версия.
Странно. Должен именно показывать хелп.
Написал. Тоиссь, перевёл. Но тут теперь уже у меня патовая ситуация: я никак не могу заставить Перл выводить из скрипта русский текст, всё время одни вопросительные знаки вместо букв. Можно, конечно, транслитом, но как-то это некузяво... в общем, пока прицепляю перевод в этот пост, может потом чего придумаю...
Оно так и есть.
Перевод хелпа:
NAME НАЗВАНИЕ
kop-librusec-dedead.pl - Сжимает удалённые/ненужные файлы в зип-архивах Либрусека для экономии места.
SYNOPSIS ЗАПУСК
kop-librusec-dedead.pl [options] dirzip [repeatable_options]
dirzip
Это директорий на вашем компьютере, из которого скрипт будет (рекурсивно) читать зип-архивы Либрусека.
OPTIONS ОПЦИИ
-help ИЛИ -h ИЛИ -?
Вывести подсказку.
-man ИЛИ -m
Вывести детальную подсказку.
-dirout ИЛИ -do path
Директорий куда писать файлы результата.
По умолчанию - текущий директорий.
-keepmistyped ИЛИ -keep
Некоторые файлы в зип-архивах Либрусека имеют указанный FileType, к примеру, .doc,
но на самом деле это запакованные (zip, rar) файлы с .doc внутри.
Опция -keep задаёт сохранение таких файлов в файлах результате.
По умолчанию такие файлы не сохраняются (считаются удалёнными).
-delete ИЛИ -del
Уничтожает ненужные файлы в файлах результата.
По умолчанию ненужные файлы не уничтожаются, а заменяются пустыми (размером в один байт).
ВНИМАНИЕ: опция -delete разрушит схему нумерации, используемую программой MyHomeLib.
НЕ пользуйтесь этой опцией, если не уверены.
SQL tables options: Опции относящиеся к SQL-таблицам:
-dirsql ИЛИ -ds path
Это директорий на вашем компьютере, из которого скрипт должен читать файлы SQL-таблиц Либрусека.
По умолчанию - текущий директорий.
-download ИЛИ -dow
Не читать SQL-таблицы из файлов, а сгрузить (в директорий dirsql) новую копию нужных SQL-таблиц с Либрусека.
Repeatable options: Повторяемые опции:
-language ИЛИ -l all|ru|en|...
Язык книг, файлы которых будут считаться "нужными", то есть будут сохранены в файлах результата.
Книги на всех других языках будут считаться "ненужными".
Опция повторяемая (см. ПРИМЕРЫ).
По умолчанию: all (все)
-format ИЛИ -f all|text|fb2|txt|doc|djvu|...
Формат (тип) файлов, которые будут считаться "нужными", то есть будут сохранены в файлах результата.
Файлы во всех других форматах будут считаться "ненужными".
По умолчанию: all (все)
text включает в себя 4 текстовых формата: fb2, txt, doc, rtf.
Любой другой формат трактуется как тип файла:
fb2 - означает, что только fb2-файлы нужны,
pdf - означает, что только pdf-файлы нужны,
-l fb2 pdf - означает, что только fb2- и pdf-файлы нужны,
и так далее.
-fb2authors ИЛИ -fb2a author1 [author2 [...]]
Список авторов fb2-файла (не книги!), которые трактуются как "нужные".
fb2-файлы всех других авторов будут считаться "ненужными".
По умолчанию: all (все)
-fb2versions ИЛИ -fb2v version_min version_max
Диапазон версий fb2-файла, которые трактуются как "нужные".
Опция требует два значения (минимальная и максимальная версии).
fb2-файлы с версией за пределами этого диапазона будут считаться "ненужными".
По умолчанию: all (все)
DESCRIPTION ОПИСАНИЕ
Этот скрипт удаляет ненужные файлы из зип-архивов Либрусека.
Скрипт читает нужные данные (FileName, FileType, Lang, Deleted)
из файлов SQL-таблиц Либрусека, и, ориентируясь по этим данным
и по заданным вами опциям, уничтожает (или заменяет файлами размером в один байт)
ненужные файлы в зип-архивах Либрусека.
Результат -меньшие по размеру зип-архивы Либрусека, записанные
в выходной директорий dirout.
Если выходной файл уже существует, он будет пропущен, а НЕ перезаписан.
Нужные скрипту входные данные - это SQL-таблицы Либрусека, и зип-архивы Либрусека.
SQL tables: SQL таблицы:
Скрипт будет читать нужные ему SQL-таблицы из заданного в опциях директория dirsql.
Файлы таблиц могут быть распакованными, или в арихиве .gz (файлы ищутся в этом порядке).
Или скрипт, если это задано опцией, может сгрузить новую копию таблиц прямо с сайта Либрусек.
Текущую версию всех SQL-таблиц Либрусека можно сгрузить отсюда: http://lib.rus.ec/sql/
Таблицы в формате MySQL dump. Список таблиц, нужных для работы этого скрипта:
lib.libbook.old.sql.gz
lib.libbook.sql.gz
lib.libfilename.sql.gz
Lib.rus.ec zip archives: Зип-архивы Либрусека:
Зип-архивы Либрусека содержат собственно файлы книг. Зип-архивы должны находиться
на вашем компьютере, в директории dirzip.
EXAMPLES ПРИМЕРЫ
kop-librusec-dedead.pl C:\librusec_zips
Прочитать SQL-таблицы из текущего директория,
зип-архивы из директория C:\librusec_zips
и вывести файлы результата в текущий директорий.
Результат будет содержать все "живые" (не удалённые на Либрусеке) файлы.
kop-librusec-dedead.pl -sd C:\in_sql C:\librusec_zips -l ru -f text
Прочитать SQL-таблицы из директория C:\in_sql,
прочитать зип-архивы из директория C:\librusec_zips
и вывести файлы результата в текущий директорий.
Результат будет содержать файлы: живые, на русском, в форматах fb2 txt doc rtf.
kop-librusec-dedead.pl -dow -od C:\out C:\zips -l en pl -f chm pdf djvu
Сгрузить новые SQL-таблицы в текущий директорий,
прочитать зип-архивы из директория C:\zips
и вывести файлы результата в директорий C:\out.
Результат будет содержать файлы: живые, на английском и польском, в форматах chm pdf djvu.
kop-librusec-dedead.pl -dow -del C:\zi -f fb2 -fb2a rusec -fb2v 1.0 1.0
Сгрузить новые SQL-таблицы в текущий директорий,
прочитать зип-архивы из директория C:\zi
и вывести файлы результата в текущий директорий.
Результат будет содержать файлы: живые, в формате fb2, автора файла "rusec", версия файла 1.0.
ВНИМАНИЕ: все остальные файлы в файлах резуьтата будут уничтожены
(присутствует опция -del), а не заменнены на файлы размеров в один байт.
Отв: kop-librusec-dedead - очень новая версия.
Спасибо большое. Оказывается папку для сохранения таки можно задавать параметром. О_о А перл дружить с русским и не надо - вполне достаточно скромного txt в архиве :) Попробую подкинуть еще идею. Что если научить скрипт перезаписывать архивы? Как я это вижу - скрипт создает в той же папке копию архива без дублей, затем исходник удаляется, а копия переименовывается в имя исходника. И так 123 раза :) Будет удобно для людей, которые хотят почистить архивы либрусека, но не имеют лишних 14 гигабайт.
Отв: kop-librusec-dedead - очень новая версия.
Версия 0.3.4 - прикреплена к этому посту. Добавил опцию "removeoriginals" (Удаляет исходные зип-архивы Либрусека по мере обработки.). Подсказку на русском поместил внутрь файла, с возможностью вывода по опции "helprus", ну а если кракозябры - тогда смотреть внутри файла, подсказка на русском в самом начале файла.
Упдате: заменил версию 0.3.4 на версию 0.3.5 - добавлена заглушка на случай "dirzip == dirout и removeoriginals присутствует", дабы неосторожные не могли так легко отстрелить себе ногу.
Отв: kop-librusec-dedead - очень новая версия.
Спасибо! Кажется скрипт наконец-то доведен до идеала :) Теперь можно по мере выхода новых архивов периодически чистить коллекцию.
Отв: kop-librusec-dedead - очень новая версия.
И сразу же задам тупой вопрос. Что не так в параметрах ярлыка\командной строки?
C:\Perl\bin\perl5.8.0.exe C:\Perl\bin\kop-librusec-dedead.pl -sd C:\Perl\bin\libsql D:\Lib.rus.ec -rem -l ru
Пишет:
Can't locate Archive/Extract.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site
/lib .) at C:\Perl\bin\kop-librusec-dedead.pl line 187.
BEGIN failed--compilation aborted at C:\Perl\bin\kop-librusec-dedead.pl line 187
.
Причем пишет вне зависимости от параметров.
UPD. Отбой. Поставил последний перл и все заработало. Кстати прописывал ds а не sd как в примере.
Отв: kop-librusec-dedead - очень новая версия.
Ура. А я как раз хотел это и посоветовать. Путаница sd - ds - спасибо что отметил, как руки дойдут поисправляю опечатки.
Отв: kop-librusec-dedead - очень новая версия.
Не заработало :( Сперва долго долго распаковывало таблицы, а потом стало создавать в папке с перлом кучу архивов по 158 байт с единичками и с именем bin в начале архива. Тоесть почему-то решило, что все файлы являются толи дублями, толи иностранцами. Кстати помоему вполне логично, что если скрипт встречает тег rem, то надо перезаписывать архивы в той же папке, где они находятся и с тем же названием, если явно не задано другое место.
Отв: kop-librusec-dedead - очень новая версия.
У меня не получилось пока логику развести, чтобы в ту же папку, и при этом не дай бог не стереть исходный зип невовремя. Но я думаю, это не шибко существенно.
Он там в начале должен выводить что-то наподобие такого, скопипейсти это сюда плз, без этого трудно разобраться будет:
Drive="U" Program name: "U:\perlscripts\kop-librusec-dedead.pl" Run date: 19:29:11 3/4/2009
Job parameters:
[ 1 of 18] deletemembers |S| "0"
[ 2 of 18] dircur |S| "C:"
[ 3 of 18] dirout |S| "C:"
[ 4 of 18] dirsql |S| "C:"
[ 5 of 18] dirzip |S| "F:\5525-compare-2008-12-22"
[ 6 of 18] download |S| "0"
[ 7 of 18] fb2authors |A| empty
[ 8 of 18] fb2versions |-| undef
[ 9 of 18] formats |A| empty
[ 10 of 18] keepmistyped |S| "0"
[ 11 of 18] languages |A| empty
[ 12 of 18] libbook |S| "C:\lib.libbook.sql"
[ 13 of 18] libbook_old |S| "C:\lib.libbook.old.sql"
[ 14 of 18] libfilename |S| "C:\lib.libfilename.sql"
[ 15 of 18] removeoriginals |S| "0"
[ 16 of 18] url_libbook |S| "http://lib.rus.ec/sql/lib.libbook.sql.gz"
[ 17 of 18] url_libbook_old |S| "http://lib.rus.ec/sql/lib.libbook.old.sql.gz"
[ 18 of 18] url_libfilename |S| "http://lib.rus.ec/sql/lib.libfilename.sql.gz"
Loading 3 librusec SQL tables into hashes...
Отв: kop-librusec-dedead - очень новая версия.
Скопировать при работающем скрипте не получилось, поэтому выкладываю скриншот.
Параметры ярлыка:
C:\Perl\bin\perl5.10.0.exe C:\Perl\bin\kop-librusec-dedead.pl -ds C:\Perl\bin\libsql D:\Lib.rus.ec -rem -l ru
Существенно. Представь - лежат архивы в папке. В myhomelib все настроено, и т.д. На винте свободна пара гигабайт. Сделал один раз ярлык и при обновлении архивов либрусека его запускаешь - он чистит лишние дубли, иностранцев и т.п., так как в старых архивах некоторое число файлов постоянно заменяется свежими версиями. После работы скрипта никуда не надо лезть, ничего не надо переименовывать(если получится подружить -dow с фаерволом ;).
А по поводу логики два варианта:
- копировать с тем же именем в папку tmp(при этом надо естественно создавать эту папку), удалять оригинал, а после завершения обработки оттуда перемещать.
- более красивый. копировать файл с другим именем в ту же папку, а после его обработки удалять старый и переименовывать новый.
Страницы