不打包
pack.sh
解压后无父目录(直接是文件)
生成
checksum.txt
(包含所有文件的 SHA256)打包后
.tar.gz
移动到上级目录
#!/bin/bash
# 检查是否传入版本号参数
if [ -z "$1" ]; then
echo "Usage: $0 <version> (e.g. v1.0.1)"
exit 1
fi
VERSION="$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 ]; then
echo "所有文件校验成功!" | tee -a $log_file
else
echo "部分文件校验失败,请检查!" | 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
文件中。