我有一个名为 '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”在一个命令中完成)
使用普通的命令行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和Archive :: 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
Fuse-zip提供对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"
警告:我直接在浏览器中键入了这些脚本。使用风险自负。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句