不打包?
pack.sh
解壓后無父目錄(直接是文件)
生成?
checksum.txt
(包含所有文件的 SHA256)打包后?
.tar.gz
?移動到上級目錄
#!/bin/bash# 檢查是否傳入版本號參數
if [ -z "$1" ]; thenecho "Usage: $0 <version> (e.g. v1.0.1)"exit 1
fiVERSION="$1"
TAR_NAME="dtu_sdk_demo_${VERSION}.tar.gz"
CHECKSUM_FILE="checksum.txt"# 1. 生成 checksum.txt(排除 pack.sh 和自身)
echo "Generating ${CHECKSUM_FILE}..."
find . -type f ! -name "${CHECKSUM_FILE}" ! -name "pack.sh" ! -name "${TAR_NAME}" -exec sha256sum {} + > "${CHECKSUM_FILE}"# 2. 打包當前目錄所有文件(排除 pack.sh 和壓縮包自身)
echo "Creating ${TAR_NAME}..."
tar -czvf "${TAR_NAME}" \--transform="s|^./||" \--exclude="pack.sh" \--exclude="${TAR_NAME}" .# 3. 將壓縮包移動到上級目錄
echo "Moving ${TAR_NAME} to parent directory..."
mv "${TAR_NAME}" ../echo "Package created successfully: ../${TAR_NAME}"
關鍵步驟:
固定排除?
pack.sh
直接在?
find
?和?tar
?命令中硬編碼?--exclude="pack.sh"
,避免動態獲取腳本名可能帶來的問題。
仍然排除?
checksum.txt
?自身和壓縮包確保校驗文件不包含自己,且不會重復打包已生成的?
.tar.gz
。
--transform="s|^./||"
確保解壓后直接是文件,沒有父目錄層級。
使用方式
chmod +x pack.sh
./pack.sh v1.0.1
適用場景
嚴格排除?
pack.sh
:避免動態獲取腳本名可能導致的意外問題。干凈打包:解壓后直接是文件,適合 SDK/軟件發布。
校驗文件完整:
checksum.txt
?確保文件未被篡改。
如果需要排除更多文件(如?.gitignore
、臨時文件等),可在?find
?和?tar
?命令中添加?--exclude
。
===========================校驗方法======================================
以下是一個?check.sh
?腳本的實現,它可以對?checksum.txt
?中記錄的文件進行校驗,打印校驗結果,并將校驗結果寫入?checksum.log
?文件。
#!/bin/bash# 定義 checksum.txt 文件的路徑
checksum_file="checksum.txt"# 定義日志文件的路徑
log_file="checksum.log"# 執行校驗操作,并將結果同時輸出到終端和日志文件
echo "開始校驗文件..." | tee -a $log_file
sha256sum -c $checksum_file 2>&1 | tee -a $log_file# 檢查校驗結果是否有失敗的情況
if [ $? -eq 0 ]; thenecho "所有文件校驗成功!" | tee -a $log_file
elseecho "部分文件校驗失敗,請檢查!" | tee -a $log_file
fi
腳本說明:
- 腳本頭部:
#!/bin/bash
?聲明這是一個 Bash 腳本。 - 變量定義:
checksum_file
:指定?checksum.txt
?文件的路徑,這里假設它與腳本在同一目錄下。log_file
:指定日志文件的路徑,同樣假設與腳本在同一目錄下。
- 執行校驗操作:
sha256sum -c $checksum_file
:執行校驗操作。2>&1
:將標準錯誤輸出重定向到標準輸出,這樣所有的輸出都會被捕獲。tee -a $log_file
:將輸出同時輸出到終端和日志文件中,-a
?選項表示追加到文件末尾。
- 檢查校驗結果:
$?
:表示上一個命令的退出狀態碼。如果為 0,則表示所有文件校驗成功;否則,表示部分文件校驗失敗。- 根據退出狀態碼輸出相應的提示信息,并將信息同時輸出到終端和日志文件中。
使用方法:
- 將上述腳本保存為?
check.sh
?文件。 - 給腳本添加執行權限:
chmod +x check.sh
- 運行腳本:
./check.sh
運行腳本后,你可以在終端看到校驗結果,同時校驗結果也會被記錄到?checksum.log
?文件中。