Bash
將存檔轉換為 .zip 格式的 Bash 腳本
我正在尋找一個靈活的 bash 腳本來執行以下操作:
- 將 .rar、.tar、.tar.gz、.bz2、.7z 檔案轉換為 .zip 格式
- 將所有文件夾結構和文件名保留為源存檔。
- 悄悄地轉換它,失敗時輸出“錯誤”,密碼保護存檔時輸出“加密”。
提前致謝。
我想你會想要使用一個
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 等獲得的錯誤,並適當地更新錯誤消息以匹配您所追求的。但這應該給你一個合理的起點。