From 5f54ff9d3496cfce81f82a76e3a0569aaf318876 Mon Sep 17 00:00:00 2001 From: xuqm Date: Wed, 23 Jul 2025 09:54:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(scripts):=20=E9=87=8D=E6=9E=84=20diff=5Fpa?= =?UTF-8?q?ck.sh=20=E7=94=A8=E4=BA=8E=E6=AF=94=E8=BE=83=20ZIP=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重写脚本以支持比较两个 ZIP 文件的差异 - 新增使用说明和参数检查 - 优化文件解压和对比逻辑 - 改进差异文件的打包方式 --- scripts/diff_pack.sh | 72 ++++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 26 deletions(-) diff --git a/scripts/diff_pack.sh b/scripts/diff_pack.sh index e4db353..9aa641a 100644 --- a/scripts/diff_pack.sh +++ b/scripts/diff_pack.sh @@ -1,35 +1,55 @@ -#!/bin/bash +#!/bin/sh +# 用法:./diff_zip_sh.sh zip1.zip zip2.zip diff.zip -# 检查参数 -if [ "$#" -ne 3 ]; then - echo "用法: $0 " +usage() { + echo "用法: $0 " 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"