Linux похож на вигвам. Никакие окна, никакие логические элементы, апач внутри!
Используя обычную командную строку 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"
Предупреждение: Я ввел эти сценарии непосредственно в моем браузере. Используйте на Ваш собственный риск.
Не уверенный в добавлении в архив, но можно всегда воссоздавать тот
unzip a.zip -d tmp
unzip b.zip -d tmp
zip -r c.zip tmp
Сначала две строки распаковывают архивы в tmp
dir и третьи пакеты это назад.
Я собираюсь сказать сразу, что я не знаю ответ от практической точки.
Однако с теоретической точки зрения, конечно, необходимо было бы разархивировать и повторно архивировать файлы. Вы не можете только переместить их в заархивированное состояние, конечно? Для запуска необходимо было бы предположить, что оба zip-файла имели идентичные настройки относительно режима сжатия и уровня.
Вы могли возможно объединить разархивировать в цепочку и архивировать команды вместе, но затем это становится вопросом переставления команд на командной строке, для которой я подчинюсь *, отклоняют экспертов.
Я стою очень готовый быть исправленным.
Существует названный инструмент zipmerge
это может сделать это. Описание от man
страница:
zipmerge объединяет исходную исходную zip архивов zip в целевую целевую zip архива zip. По умолчанию файлы в исходных архивах zip сверх - пишут существующие файлы того же имени в целевом архиве zip.