feat(scripts): 重构 diff_pack.sh 用于比较 ZIP 文件

- 重写脚本以支持比较两个 ZIP 文件的差异
- 新增使用说明和参数检查
- 优化文件解压和对比逻辑
- 改进差异文件的打包方式
这个提交包含在:
xuqm 2025-07-23 09:54:36 +08:00
父节点 c8f07579de
当前提交 5f54ff9d34

查看文件

@ -1,35 +1,55 @@
#!/bin/bash
#!/bin/sh
# 用法:./diff_zip_sh.sh zip1.zip zip2.zip diff.zip
# 检查参数
if [ "$#" -ne 3 ]; then
echo "用法: $0 <dir1> <dir2> <output.tar.gz>"
usage() {
echo "用法: $0 <zip1> <zip2> <diff.zip>"
exit 1
fi
}
dir1="$1"
dir2="$2"
output="$3"
[ "$#" -eq 3 ] || usage
# 确保目录存在
if [ ! -d "$dir1" ] || [ ! -d "$dir2" ]; then
echo "错误:目录不存在"
exit 1
fi
zip1=$1
zip2=$2
diffzip=$3
# 创建临时目录
tmp_dir=$(mktemp -d)
trap "rm -rf $tmp_dir" EXIT
# 检查文件
for f in "$zip1" "$zip2"; do
[ -f "$f" ] || { echo "文件不存在: $f"; exit 1; }
done
# 使用 rsync 找出 dir2 中新增或修改的文件
rsync -av --compare-dest="$dir1" "$dir2"/ "$tmp_dir"/ > /dev/null
# 临时目录
tmp=$(mktemp -d)
trap 'rm -rf "$tmp"' EXIT
# 如果没有差异,提示并退出
if [ -z "$(ls -A "$tmp_dir")" ]; then
echo "两个目录内容一致,无需打包。"
tmp1=$tmp/1
tmp2=$tmp/2
tmp3=$tmp/3
mkdir -p "$tmp1" "$tmp2" "$tmp3"
# 解压
unzip -q "$zip1" -d "$tmp1"
unzip -q "$zip2" -d "$tmp2"
# 递归对比
find "$tmp2" -type f | while IFS= read -r f2; do
rel=${f2#$tmp2/}
f1=$tmp1/$rel
if [ -f "$f1" ] && cmp -s "$f1" "$f2"; then
continue # 内容相同,跳过
fi
dest=$tmp3/$rel
mkdir -p "$(dirname "$dest")"
cp "$f2" "$dest"
done
# 无差异
[ -z "$(find "$tmp3" -type f 2>/dev/null)" ] && {
echo "两个 ZIP 内容完全一致,无需输出。"
exit 0
fi
}
# 打包压缩
tar -czf "$output" -C "$tmp_dir" .
echo "✅ 差异文件已打包为:$output"
# 打包
(cd "$tmp3" && zip -qr ../out.zip .)
mv "$tmp/out.zip" "$diffzip"
echo "✅ 差异文件已保存到 $diffzip"