Bash

將存檔轉換為 .zip 格式的 Bash 腳本

  • November 8, 2011

我正在尋找一個靈活的 bash 腳本來執行以下操作:

  1. 將 .rar、.tar、.tar.gz、.bz2、.7z 檔案轉換為 .zip 格式
  2. 將所有文件夾結構和文件名保留為源存檔。
  3. 悄悄地轉換它,失敗時輸出“錯誤”,密碼保護存檔時輸出“加密”。

提前致謝。

我想你會想​​要使用一個case語句來選擇如何根據文件名解壓縮輸入存檔(或者可能使用file它來基於內容)。將輸入存檔解壓縮到臨時目錄,將 stdout/stdin 管道傳輸到 /dev/null 或文件。然後zip在臨時目錄的內容上執行,保存到命令行上提供的文件名。刪除臨時目錄。

像這樣的東西(未經測試):

infile="$1"
outfile="$2"
# Add syntax checking here
tempdir=`mktemp -d`
case "$infile" in
   *.tar.gz)
       tar -C "$tempdir" -xzf "$infile" 2>/dev/null
       ;;
   *.tar)
       tar -C "$tempdir" -xf "$infile" 2>/dev/null
       ;;
... # Add handling for other input formats here
   *)
       echo "Unrecognized input format" >&2
       false
       ;;
esac
if [ $? -ne 0 ]; then
   echo "Error processing input file $infile" >&2 # or just echo "error"
   rm -rf "$tempdir"
   exit 1
fi
(cd "$tempdir" && zip "$outfile" .)
rm -rf "$tempdir"

當檔案被“加密”時,您需要確定您從 tar 等獲得的錯誤,並適當地更新錯誤消息以匹配您所追求的。但這應該給你一個合理的起點。

引用自:https://serverfault.com/questions/88727