linux 差分文件,【linux】使用rsync命令将两个文件夹下的所有文件进行差分

其实这是一个理解错需求后的产物....

首先这里的差分表示:对比两个文件夹下的所有文件,文件内容有差异的所有文件提取出来,保持其目录结构存放到新的目标目录中。

这里的有差异是对文件内容进行对比,文件时间戳不同但是文件内容一样时视为无差异。

rsync --dry-run -rcn --out-format="%n" $base_path/new/$new_name/ $base_path/old/$old_name/ |grep -v "/$"|xargs -I{} rsync -R -a ./{} $base_path/out/$ba_name

1、--dry-run:只进行演示;

2、-rcn:

3、$base_path/new/$new_name/ 新文件夹路径 $base_path/old/$old_name/ 旧文件夹路径

4、|grep -v "/$":过滤 “/”结尾的文件夹显示

5、|xargs -I{}: 将两条命令拼为一条,因为要把前面一条输出的文件列表{}给后面一条作为参数

6、第二条命令:从./{}拷到$base_path/out/$ba_name

7、-a:递归并且保持目录结构和文件属性权限地进行拷贝

以下代码是将两个文件夹互相进行差分,以及一个最新版本的全量包。

#! /bin/sh

set -e

base_path=$(cd $(dirname $0);pwd)

echo "path:"$base_path

new_path=$(cd ./new/*;pwd)

new_name=${new_path##*/}

echo "new_name:"$new_name

old_path=$(cd ./old/*;pwd)

old_name=${old_path##*/}

echo "old_name:"$old_name

ab_name="$old_name-$new_name"

echo "ab_name:"$ab_name

ba_name="$new_name-$old_name"

echo "ba_name:"$ba_name

full_name="$new_name-FULLDIFF"

echo "full_name:"$full_name

rm -r $base_path/out/*

echo "remove out file..."

mkdir $base_path/out/$ab_name

cd $base_path/new/$new_name

rsync --dry-run -rcn --out-format="%n" $base_path/old/$old_name/ $base_path/new/$new_name/ |grep -v "/$"|xargs -I{} rsync -R -a ./{} $base_path/out/$ab_name

echo "A-B file complete!"

mkdir $base_path/out/$ba_name

cd $base_path/old/$old_name

rsync --dry-run -rcn --out-format="%n" $base_path/new/$new_name/ $base_path/old/$old_name/ |grep -v "/$"|xargs -I{} rsync -R -a ./{} $base_path/out/$ba_name

echo "B-A file complete!"

mkdir $base_path/out/$full_name

cd $base_path/new/$new_name

rsync -R -ra * $base_path/out/$full_name

echo "B-FULL file complete!"

echo "finish."

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值