#!/bin/bash# 目標目錄
TARGET_DIR="/appdata/jn1m/versions/old/bin"# 校驗文件
CHECKSUM_FILE="checksum.txt"# 檢查目標目錄是否存在
if [ ! -d "$TARGET_DIR" ]; thenecho "錯誤:目標目錄 $TARGET_DIR 不存在"exit 1
fi# 檢查校驗文件是否存在
if [ ! -f "$CHECKSUM_FILE" ]; thenecho "錯誤:校驗文件 $CHECKSUM_FILE 不存在"exit 1
fi# 創建目標目錄(如果不存在)
mkdir -p "$TARGET_DIR"echo "開始驗證文件完整性并復制驗證通過的文件..."
echo "目標目錄: $TARGET_DIR"
echo "---------------------------------"# 計數器
total_files=0
copied_files=0# 逐行處理校驗文件
while IFS= read -r line; do# 跳過空行if [ -z "$line" ]; thencontinuefitotal_files=$((total_files + 1))# 提取文件名(去除開頭的"./")filename=$(echo "$line" | awk '{print $2}' | sed 's|^\./||')# 檢查文件是否存在if [ ! -f "$filename" ]; thenecho "× 文件不存在: $filename"continuefi# 創建臨時校驗文件temp_checksum=$(mktemp)echo "$line" > "$temp_checksum"# 驗證單個文件if sha256sum -c "$temp_checksum" >/dev/null 2>&1; thenecho "√ 驗證通過: $filename"# 復制文件到目標目錄if cp -v "$filename" "$TARGET_DIR/"; thenecho " 已復制到: $TARGET_DIR/"copied_files=$((copied_files + 1))elseecho " 復制失敗: $filename"fielseecho "× 驗證失敗: $filename"fi# 清理臨時文件rm -f "$temp_checksum"echo "---------------------------------"
done < "$CHECKSUM_FILE"# 顯示最終結果
echo "驗證完成!"
echo "總計文件: $total_files"
echo "驗證通過并復制: $copied_files"if [ "$total_files" -ne "$copied_files" ]; thenecho "警告: 部分文件未通過驗證或復制失敗"exit 2
elseecho "√ 所有文件驗證通過并成功復制"
fi
腳本功能說明:
驗證與復制流程:
逐行讀取checksum.txt文件
對每個文件單獨進行SHA256校驗
只復制驗證通過的文件到目標目錄
顯示詳細的驗證和復制結果
目標目錄處理:
自動創建目標目錄(如果不存在)
目標路徑設置為:
/appdata/jn1m/versions/old/bin
錯誤處理:
檢查目標目錄是否存在
檢查校驗文件是否存在
處理文件不存在的情況
顯示復制失敗的文件
最終統計成功/失敗數量