Скопировать файл от одной Zip до другого?

Linux похож на вигвам. Никакие окна, никакие логические элементы, апач внутри!

6
19.02.2011, 00:28
4 ответа

Используя обычную командную строку zip инструмент, я не думаю, что можно избежать отдельного извлечения и обновить команды.

source_zip=$PWD/sourceZip.zip
target_zip=$PWD/targetZip.zip
temp_dir=$(mktemp -dt)
( cd "$temp_dir"
  unzip "$source_zip"
  zip -g "$targetZip" .
  # or if you want just the two files: zip -g "$targetZip" textFile.txt binFile.bin
)
rm -rf "$temp_dir"

Существуют другие языки с более удобными библиотеками управления zip-файлом. Например, Perl с Архивом:: Zip. Проверка ошибок опущена.

use Archive::Zip;
my $source_zip = Archive::Zip->new("sourceZip.zip");
my $target_zip = Archive::Zip->new("targetZip.zip");
for my $member ($source_zip->members()) {
          # or (map {$source_zip->memberNamed($_)} ("textFile.txt", "binFile.bin"))
    $target_zip->addMember($member);
}
$target_zip->overwrite();

Иначе должен смонтировать zip-файлы как каталоги. Монтирование любого из zip-файлов достаточно, можно использовать zip или unzip с другой стороны. Avfs оказывает поддержку только для чтения для многих форматов архива.

mountavfs
target_zip=$PWD/targetZip.zip
(cd "$HOME/.avfs$PWD/sourceZip.zip#" &&
 zip -g "$target_zip" .)  # or list the files, as above
umountavfs

Zip предохранителя обеспечивает доступ для чтения-записи для архивирования архивов, таким образом, можно скопировать файлы с cp.

source_dir=$(mktemp -dt)
target_dir=$(mktemp -dt)
fuse-zip sourceZip.zip "$source_dir"
fuse-zip targetZip.zip "$target_dir"
cp -Rp "$source_dir/." "$target_dir" # or list the files, as above
fusermount -u "$source_dir"
fusermount -u "$target_dir"
rmdir "$source_dir" "$target_dir"

Предупреждение: Я ввел эти сценарии непосредственно в моем браузере. Используйте на Ваш собственный риск.

5
27.01.2020, 20:24

Не уверенный в добавлении в архив, но можно всегда воссоздавать тот

unzip a.zip -d tmp
unzip b.zip -d tmp
zip -r c.zip tmp

Сначала две строки распаковывают архивы в tmp dir и третьи пакеты это назад.

4
27.01.2020, 20:24

Я собираюсь сказать сразу, что я не знаю ответ от практической точки.

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

Вы могли возможно объединить разархивировать в цепочку и архивировать команды вместе, но затем это становится вопросом переставления команд на командной строке, для которой я подчинюсь *, отклоняют экспертов.

Я стою очень готовый быть исправленным.

0
27.01.2020, 20:24

Существует названный инструмент zipmerge это может сделать это. Описание от man страница:

zipmerge объединяет исходную исходную zip архивов zip в целевую целевую zip архива zip. По умолчанию файлы в исходных архивах zip сверх - пишут существующие файлы того же имени в целевом архиве zip.

2
27.01.2020, 20:24

Теги

Похожие вопросы