LINUX.ORG.RU

zipbatch - программа для пакетного добавления/замены файлов в zip-архиве


0

0

Программа позволяет добавлять файлы в zip-архив (или заменять, если таковые уже существуют), переименовывая их перед добавлением.

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

Но, допустим, вам также надо не просто добавить файлы с возможной заменой, а добавить их в архив под другим именем (или вообще с другим путем). Именно здесь zipbatch может помочь. Вы создаете файл со строками формата

%real_file_path%=%file_path_in_archive%
, даете программе директорию, где искать заданные файлы и путь к архиву (он будет создан, если его не окажется). zipbatch будет архивировать файл %real_file_name%, добавляя его в архив под другим путем - %file_path_in_archive%.

Вот, собственно, весь смысл утилиты.

Использование zip для этой же задачи нецелесообразно, так как для каждого файла архив будет открываться и закрываться, что приведет к большим временным задержкам при большом количестве файлов для добавления.

Утилита зависит от libzip и libargtable2. Написана на С. Здесь - git-repo - можно скачать исходники (билдится autotools). См. README для более детальной информации.

Программе, в самом простом варианте, не нужны никакие параметры: она будет писать в 'result.zip', ища файлы в текущей директории и читая строки с stdin. Таким образом, утилита может быть легко и просто завязана с другими unix-тулзами.

★★

Модераторам - этой информации место на главной?

bk_ ★★
() автор топика

>Использование zip для этой же задачи нецелесообразно, так как для каждого файла архив будет открываться и закрываться

Уверен? Обычному зипу можно указать сразу пачку файлов

nu11 ★★★★★
()
Ответ на: комментарий от nu11

добавить их в архив под другим именем

Вот в чем соль - добавление их в архив под другим именем, а не под тем же.

bk_ ★★
() автор топика
Ответ на: комментарий от nu11

Я даже не нашел, как через утилиту zip можно файлы переименовывать.

С моей программой это делается гораздо удобней.

bk_ ★★
() автор топика
Ответ на: комментарий от x3al

Насколько я понял, тот же fuse-zip предлагает бОльшие возможности для гибкой работы с содержимым архива (mv, cp etc), но если требуется только переименование, то моя программа даже на простом тесте оказывается быстрее:

есть архив initial.zip с 1000 файлов по 200 байт каждый. Я добавляю туда еще 1000 файлов (не перекрываются со старыми) тоже по 200 байт.

Для zipbatch создаю конфиг из 1000 строк типа

file$i=file_$i
, где $i == {10000..11000}. Дальше запускаю и получаю почти мгновенный результат -

0.15user 0.09system 0:00.25elapsed 96%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+496outputs (0major+19434minor)pagefaults 0swaps

Для fuse-zip с примонтированным архивом и командой

time for i in {10000..11000}; do cp "../../append/file$i" "./file_$i"; done

получаю

real    0m2.464s
user    0m0.448s
sys     0m1.376s

Поправьте, если тест оказался нечестным.

bk_ ★★
() автор топика
Ответ на: комментарий от bk_

Единственно, присутствует разница в размерах архивов (в байтах):

zipbatch - 249911 fuse-zip - 146808

bk_ ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.