Shell - 把 zip 替換成 7z

Posted on 2024-03-09

因為之前存檔 (備份) 的檔案有蠻多都是 zip 的,想說可不可以一次把它換成 7z 的檔案,於是就有這篇文章

我記得好像也是問 GPT 的,只是我找不到對話記錄

#!/bin/bash

# 檢查是否安裝了 7z
if ! command -v 7zz &> /dev/null; then
    echo "錯誤:未安裝 7z。請先安裝 7z 後再運行此腳本。"
    exit 1
fi

# 定位到包含 ZIP 檔案的資料夾
#cd /path/to/directory

# 尋找所有的 ZIP 檔案並進行處理
for file in *.zip; do
    # 確保檔案存在
    if [[ -f "$file" ]]; then
        # 解壓縮 ZIP 檔案
        unzip "$file"

        # 移除副檔名,獲得檔案名稱
        filename=$(basename "$file" .zip)

        # 使用 7z 壓縮,壓縮率設為最高
        7zz a -t7z -mx=9 "$filename.7z" "$filename"

        # 測試壓縮檔案的完整性
        if 7zz t "$filename.7z"; then
            echo "7z 檔案測試通過:$filename.7z"

            # 刪除原始 ZIP 檔案和解壓縮後的檔案/資料夾
            rm -r "$file" "$filename"
        else
            echo "警告:7z 檔案測試失敗:$filename.7z,保留原始 ZIP 檔案。"
        fi
    fi
done

Photo by Michal Balog on Unsplash