Linux
將文件從一個 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’)
使用通常的命令行
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 文件操作庫。例如,帶有Archive::Zip的 Perl 。省略了錯誤檢查。
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"
警告:我直接在瀏覽器中輸入了這些腳本。使用風險自負。