Tips & tricks — Упростим упаковку/распаковку архивов в консоли — 2
В начале этого месяца на welinux'е пробегала отличная статья от Zend'а, повествующая о двух функциях, образующих единый интерфейс к различным архиваторам. В комментариях было указано на некоторые недостатки функций (например, проблемы в случае передачи скрипту не конкретного имени, а списка файлов), а также сделан намёк на превосходную тулзу pv, которая позволяет отображать красивые прогресс-бары при пропускании инфы по пайпам. Я на момент публикации той статьи работать на своём Linux-десктопе не мог, но идею запомнил — ибо хорошо. Недавно я таки добрался до десктопа, усовершенствовал — может быть, правильнее будет говорить «переписал» — код Zend'а и теперь представляю его на ваш суд.
Отличия от Zend'овской версии следующие:
Всё это дело в активном режиме гоняет у меня на компе уже четыре дня, все ошибки (пока что была найдена аж одна :) оперативно фиксятся. Есть некоторые планы по доработке (см. TODO), но они не критичны — основные функции скрипты уже выполняют.
Т.к. разработка всё ещё продолжается, считаю целесообразным не постить листинги кода, а дать ссылку на git-рупозиторий: git://github.com/Minoru/EasyPK.git. Получить локальную копию скриптов очень просто:
(естественно, git должен быть установлен; Debian'щикам хватит git-core). Также есть возможность смотреть код прямо в браузере — http://github.com/Minoru/EasyPK/tree/master. Дабы опровергнуть мнения о том, что у меня мания величия («написал парочку мелких скриптов, а уже хостит их в git и даже называет всё это дело “EasyPK distribution”»!), приведу пару причин, почему так:
Всем заинтересовавшимся — welcome, жду фидбеков в виде камментов к посту ;)
P.S. Спасибо Zend за идею скрипта и Raging_Hog'у за толчок в сторону github.
Отличия от Zend'овской версии следующие:
- При упаковке/распаковке по возможности юзается pv. Если нельзя (zip, rar, 7z), используются стандартные средства отображения прогресса. Присутствует проверка на наличие и доступность pv. Если отсутствует, при архивировании включаются стандартные -v опции, чтобы хоть как-то показать, что работа идёт :)
- Добавлены опции --help. Так солиднее :)
- В pk обавлена опция -o. За ней следует имя файла, в который будет осуществляться вывод. Не используется при упаковке gzip и bzip2.
- Добавлено немного логики для работы с выходным файлом. bzip2 и gzip просто пакуют каждый из переданных файлов в имя_исходного_файла.gz (или .bz2), остальные ведут себя следующим образом:
— Если задана опция -o, то использовать в качестве выходного файла её аргумент, иначе:
+—— если файл один, то паковать в имя_исходного_файла.tar (tar.bz2, tar.gz, zip… — зависит от архиватора)
+—— если файлов много, то юзать имя_текущей_директории.tar (расширение, опять-таки, по обстоятельствам)
Всё это дело в активном режиме гоняет у меня на компе уже четыре дня, все ошибки (пока что была найдена аж одна :) оперативно фиксятся. Есть некоторые планы по доработке (см. TODO), но они не критичны — основные функции скрипты уже выполняют.
Т.к. разработка всё ещё продолжается, считаю целесообразным не постить листинги кода, а дать ссылку на git-рупозиторий: git://github.com/Minoru/EasyPK.git. Получить локальную копию скриптов очень просто:
git clone "git://github.com/Minoru/EasyPK.git"
- ещё в самом начале разработки, когда только-только прикручивался pv, я обронил на одном из irc-каналов, что пишу скрипт. Всем сразу стало жутко интересно, я аж засомневался, не приняли ли мои слова за анонс нового open source ядра :D Короче, пришлось pastebin'ить сорцы, и повторять процедуру после каждого значимого изменения.
- Я раньше пробовал SVN и меня, вобщем-то, заинтересовало применение VCS. А вот подвернулась возможность поюзать Git — и сервер есть, и задача ;)
Всем заинтересовавшимся — welcome, жду фидбеков в виде камментов к посту ;)
P.S. Спасибо Zend за идею скрипта и Raging_Hog'у за толчок в сторону github.