将文件从一个 Zip 复制到另一个 Zip?

将文件从一个 Zip 复制到另一个 Zip?

我有一个名为'sourceZip.zip'

该文件 ( 'sourceZip.zip') 包含两个文件:

'textFile.txt'

'binFile.bin'


我还有一个名为'targetZip.zip'

该文件 ( 'targetZip.zip') 包含一个文件:

'jpgFile.jpg'


在Linux中,我应该使用什么bash命令将两个文件('textFile.txt''binFile.bin')从源存档('sourceZip.zip')直接复制到第二个存档('targetZip.zip'),以便在过程结束时,第二个存档('targetZip.zip')将包含所有三个文件?

(理想情况下,这可以使用“zip”或“unzip”在一个命令中完成)

答案1

使用通常的命令行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或。unzipAVFS为许多存档格式提供只读支持。

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"

警告:我直接在浏览器中输入这些脚本。使用风险自负。

答案2

不确定添加存档,但您随时可以重新创建一个

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

前两行将档案解压到tmp目录中,第三行将其打包回来。

答案3

有一个工具zipmerge可以做到这一点。页面的描述man是:

zipmerge 将源 zip 归档文件 source-zip 合并到目标 zip 归档文件 target-zip 中。默认情况下,源 zip 存档中的文件会覆盖目标 zip 存档中的同名现有文件。

答案4

我要直截了当地说,从实际角度来看,我不知道答案。

但是,从理论角度来看,您肯定必须解压缩并重新压缩文件。您肯定不能将它们移动到压缩状态吗?首先,您必须假设两个 zip 文件在压缩模式和级别方面具有相同的设置。

您可以将 unzip 和 zip 命令链接在一起,但这就变成了在命令行上处理命令的问题,对此我将听从 *nix 专家的意见。

我随时准备接受纠正。

相关内容