Zip

如何將 zip 重新打包為 7zip?

  • May 27, 2018

如何安全快速地將 zip 存檔重新打包為 7zip 存檔?

我檢查了 7zip 程序的選項,但沒有看到任何重新打包的選項。我知道我可以解壓到目錄然後打包這個目錄,但它安全嗎?如果 ZIP 具有“../../file.exe”或“/etc/bin/file.exe”之類的路徑怎麼辦?

我嘗試將文件解壓縮到標準輸出,雖然程序 7zip 可以做到這一點,但它只輸出不帶文件名的文件內容等。所以我不能只是抓住這個輸出並重定向到某個地方打包到一個 7zip 存檔中。

您需要將它們解壓縮到一個臨時目錄。

unzip (1)

出於安全原因,解壓縮通常會從提取文件的名稱中刪除“父目錄”路徑組件(“../”)。此安全功能(版本 5.50 的新功能)可防止解壓縮意外將文件寫入活動提取文件夾樹頭之外的“敏感”區域。

因此,雖然它可能是安全的,但您的結果7z可能會以不同的方式排列文件,或者如果文件名重複,甚至會失去。

這是一個範例腳本,但它忽略了..絕對路徑問題:

#!/bin/sh
set -e
if [ "$1" == "" -o "$2" == "" ]
then
   echo Usage: $0 archive.zip archive.7z
   exit 1
fi
scratch=`mktemp -d`
trap "rm -rf $scratch" EXIT
in=`readlink -f $1`
out=`readlink -f $2`
if [ -f $out ]
then
   echo $out exists.
   exit 2
fi
unzip -d"$scratch" "$in"
cd "$scratch"
7z a "$out" .

引用自:https://unix.stackexchange.com/questions/365461