当前位置: 首页 > news >正文

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

脚本功能说明:

  1. 验证与复制流程

    • 逐行读取checksum.txt文件

    • 对每个文件单独进行SHA256校验

    • 只复制验证通过的文件到目标目录

    • 显示详细的验证和复制结果

  2. 目标目录处理

    • 自动创建目标目录(如果不存在)

    • 目标路径设置为:/appdata/jn1m/versions/old/bin

  3. 错误处理

    • 检查目标目录是否存在

    • 检查校验文件是否存在

    • 处理文件不存在的情况

    • 显示复制失败的文件

    • 最终统计成功/失败数量

http://www.lryc.cn/news/621703.html

相关文章:

  • 【Spring框架】SpringIOC
  • 代码随想录二刷之“字符串”~GO
  • 状态管理中应用进程和宿主进程的概念及相互关系
  • 初识CNN02——认识CNN2
  • Jeecg后端经验汇总
  • redis-sentinel基础概念及部署
  • JVM执行引擎深入理解
  • 异步开发:协程、线程、Unitask
  • 关于C++的#include的超超超详细讲解
  • LCR 076. 数组中的第 K 个最大元素
  • IStoreOS(OpenWrt)开启IPV6
  • 【已解决】在Spring Boot工程中,若未识别到resources/db文件夹下的SQL文件
  • 10--C++模板参数与特化详解
  • Linux Namespace隔离实战:dd/mkfs/mount/unshare构建终极沙箱
  • 基于CodeBuddy的2D游戏开发实践:炫酷大便超人核心机制解析
  • 云手机存储和本地存储的区别
  • Ant-Design AUpload如何显示缩略图;自定义哪些类型的数据可以使用img预览
  • 用3D打印重新定义骑行-中科米堆CASAIM自行车座椅个性化设计
  • Spring Ai 如何配置以及如何搭建
  • Cursor CLI 技术解析:免费调用 GPT-5 的命令行方案
  • Flink的状态管理
  • 项目篇------------网页五子棋(知识预备)
  • GPT 解码策略全解析:从 Beam Search 到 Top-p 采样
  • spring ai-openai-vl模型应用qwen-vl\gpt-文字识别-java
  • 自学大语言模型之Transformer的Tokenizer
  • 用GPT解释“GPT-5”是什么,有什么优势
  • Spring IOC容器在Web环境中的启动奥秘:深入源码解析
  • Grafana 与 InfluxDB 可视化深度集成(一)
  • Al大模型-本地私有化部署大模型-大模型微调
  • 算法学习远程访问:借助 cpolar 内网穿透服务使用 Hello-Algo