1. 不打包 pack.sh

  2. 解压后无父目录(直接是文件)

  3. 生成 checksum.txt(包含所有文件的 SHA256)

  4. 打包后 .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}"

关键步骤:

  1. 固定排除 pack.sh

    • 直接在 find 和 tar 命令中硬编码 --exclude="pack.sh",避免动态获取脚本名可能带来的问题。

  2. 仍然排除 checksum.txt 自身和压缩包

    • 确保校验文件不包含自己,且不会重复打包已生成的 .tar.gz

  3. --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

脚本说明:

  1. 脚本头部#!/bin/bash 声明这是一个 Bash 脚本。
  2. 变量定义
    • checksum_file:指定 checksum.txt 文件的路径,这里假设它与脚本在同一目录下。
    • log_file:指定日志文件的路径,同样假设与脚本在同一目录下。
  3. 执行校验操作
    • sha256sum -c $checksum_file:执行校验操作。
    • 2>&1:将标准错误输出重定向到标准输出,这样所有的输出都会被捕获。
    • tee -a $log_file:将输出同时输出到终端和日志文件中,-a 选项表示追加到文件末尾。
  4. 检查校验结果
    • $?:表示上一个命令的退出状态码。如果为 0,则表示所有文件校验成功;否则,表示部分文件校验失败。
    • 根据退出状态码输出相应的提示信息,并将信息同时输出到终端和日志文件中。

使用方法:

  1. 将上述脚本保存为 check.sh 文件。
  2. 给脚本添加执行权限:
chmod +x check.sh
  1. 运行脚本:
./check.sh

运行脚本后,你可以在终端看到校验结果,同时校验结果也会被记录到 checksum.log 文件中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/89071.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89071.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/89071.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用uniapp开发鸿蒙应用(暂停更新-根据项目更新,现在项目未开始)

1.根据博客生成.hap文件 【鸿蒙HarmonyOS开发技巧&#xff1a;如何不依赖华为商店直接安装uniapp生成的app文件&#xff1f;一键转换app至hap格式教程详解】_entry-default-signed.hap-CSDN博客 根据网络查询鸿蒙手机安装测试app&#xff0c;需要电脑命令安装 在鸿蒙HarmonyOS手…

Linux 文件系统实现层详解:原理、结构与驱动衔接

&#x1f4c2; Linux 文件系统实现层详解&#xff1a;原理、结构与驱动衔接 &#x1f3ac; 推荐搭配视频学习&#xff1a;Linux 文件系统子系统&#xff1a;三层架构全面掌握 一、为什么要重点理解文件系统实现层&#xff1f; 文件系统实现层是 Linux 文件系统的“地基”&…

区块链应用场景深度解读:金融领域的革新与突破

引言&#xff1a;区块链技术的演进与金融领域的变革区块链技术自2008年诞生以来&#xff0c;以其去中心化、不可篡改、可追溯等特性&#xff0c;在全球范围内引发了金融领域的深刻变革。从最初的数字货币实验&#xff0c;到如今在跨境支付、证券交易、供应链金融等领域的广泛应…

redisson tryLock

应用场景RLock rLock redissonClient.getLock(Constant_LOCK request.getId()); try {boolean isLocked rLock.tryLock();if (!isLocked) {throw new ServiceException(ErrConstant.OPERATION_FAILED, "请勿重复提交");}源码public interface RLock extends Lock,…

前端docx库实现将html页面导出word

前言&#xff1a;最近遇到一个需求&#xff0c;需要将页面的html导出为word文档&#xff0c;并且包含横向和竖向页面&#xff0c;并且可以进行混合方向导出。经过一段时间的实验&#xff0c;发现只有docx这个库满足这个要求。在这里记录一下实现思路以及代码。 docx官网 一、…

虚拟主机CPU占用100导致打不开的一次处理

背景 突然有一天&#xff0c;有个客户网站打不开了&#xff0c;发来这样一张图片问题排查 打开阿里云虚拟主机控制面板&#xff0c;CPU 使用率已经达到了100%&#xff0c;这说明网站已经在高负荷运转。分析访问日志发现&#xff0c;网站出现了大量循环路径&#xff0c;其 UserA…

设计模式之工厂模式:对象创建的智慧之道

工厂模式&#xff1a;对象创建的智慧之道 引言&#xff1a;为什么我们需要工厂模式&#xff1f; 在软件开发中&#xff0c;对象创建是最常见的操作之一。当代码中充满new关键字时&#xff0c;系统会面临三大痛点&#xff1a; 紧耦合&#xff1a;客户端代码直接依赖具体实现类扩…

Docker镜像制作案例

1、使用Docker commit制作镜像为ubuntu镜像提供ssh服务①&#xff1a;拉取镜像[rootopenEuler-1 ~]# docker pull ubuntu:18.04②&#xff1a;启动镜像[rootopenEuler-1 ~]# docker run --name c1 -it --rm ubuntu:18.04 bash③&#xff1a;替换aliyun源mv /etc/apt/sources.li…

KeilMDK5如何生成.bin文件

1&#xff1a;主要是要找到fromelf.exe的路径2&#xff1a;接下来要做的要视情况而定&#xff1a;选完fromelf.exe后在输入框中加个空格然后加一串字 : --bin -o ./Obj/L.bin ./Obj/L.axf&#xff0c;如下我设置的L最终会替换成项目名 3&#xff1a;去构建生成编译一下&#…

Ajax接收java后端传递的json对象包含长整型被截断导致丢失精度的解决方案

问题描述 在使用java编写代码的时候,后端返回前端的JSON对象中包含了Long长整型,前端接受的时候丢失了精度问题。 比如: 后端传递的json {"code": "200","msg": "操作成功","data":

MybatisPlus由浅入深

MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis 的增强工具&#xff0c;旨在简化开发过程。基本使用步骤1.依赖引入<!-- mysql依赖 --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>…

蓝牙信号强度(RSSI)与链路质量(LQI)的测量与应用:面试高频考点与真题解析

在蓝牙通信领域&#xff0c;信号强度&#xff08;RSSI&#xff09;和链路质量&#xff08;LQI&#xff09;是评估无线链路性能的核心指标。无论是智能家居设备的连接优化&#xff0c;还是工业物联网中的抗干扰设计&#xff0c;这两个指标都扮演着关键角色。本文将结合面试高频考…

PyTorch的计算图是什么?为什么绘图前要detach?

在PyTorch中&#xff0c;计算图&#xff08;Computational Graph&#xff09; 是自动求导&#xff08;Autograd&#xff09;的核心机制。理解计算图有助于解释为什么在绘图前需要使用 .detach() 方法分离张量。一、什么是计算图&#xff1f; 计算图是一种有向无环图&#xff08…

深度学习入门代码详细注释-ResNet18分类蚂蚁蜜蜂

本项目将基于PyTorch平台迁移ResNet18模型。该模型原采用ImageNet数据集&#xff08;含1000个图像类别&#xff09;进行训练。我们将尝试运用该模型对蚂蚁和蜜蜂进行分类&#xff08;这两个类别未包含在原训练数据集中&#xff09;。 本文的原始代码参考于博客深度学习入门项目…

北京饮马河科技公司 Java 实习面经

北京饮马河科技公司 Java 实习面经 本文作者&#xff1a;程序员小白条 本站地址&#xff1a;https://xbt.xiaobaitiao.top 1&#xff09; 面试官&#xff1a;我看你这块是有一个开源的项目&#xff0c;这个项目主要是做什么的&#xff1f; 我&#xff1a;主要两点是亮点&…

java基础(day07)

目录 OOP编程 方法 方法的调用&#xff1a; 在main入口函数中调用&#xff1a; 动态参数&#xff1a; 方法重载 OOP编程 方法 概念&#xff1a;指为获得某种东西或达到某种目的而采取的手段与行为方式。有时候被称作“方法”&#xff0c;有时候被称作“函数”。例如UUID.…

使用EasyExcel动态合并单元格(模板方法)

1、导入EasyExcel依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.3</version> </dependency>2、编写实体类Data publci class Student{ ExcelProperty("姓名")pri…

jenkins 流水线比较简单直观的

//全篇没用自定义变量pipeline {agent any// 使用工具自动配置Node.js环境tools {nodejs nodejs22 // 需在Jenkins全局工具中预配置该名称的Node.js安装}//下面拉取代码通过的是流水线片段生成的stages {stage(Checkout Code) {steps {git branch: release-v1.2.6,credentials…

CV目标检测中的LetterBox操作

LetterBox类比理解&#xff1a;想象你要把一张任意形状的照片放进一个正方形的相框里&#xff0c;照片不能变形拉伸&#xff0c;所以你先等比例缩小照片&#xff0c;然后在空余的地方填上灰色背景。第1章 数学原理当我们有一个原始图像的尺寸为 19201080&#xff08;宽高&#…

Leetcode 3614. Process String with Special Operations II

Leetcode 3614. Process String with Special Operations II 1. 解题思路2. 代码实现 题目链接&#xff1a;3614. Process String with Special Operations II 1. 解题思路 这一题思路上是一个逆推的思路。 首先&#xff0c;我们顺序走一轮不难得到最终我们能够获得的字符串…