shell脚本实现sha256sum校验并拷贝校验通过的文件
#!/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
错误处理:
检查目标目录是否存在
检查校验文件是否存在
处理文件不存在的情况
显示复制失败的文件
最终统计成功/失败数量