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


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

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

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

    参考文章:https://my.oschina.net/mengshuai/blog/551379

    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."
  • 相关阅读:
    位运算符的含义与使用
    第三次作业
    软件工程作业二
    大学对于专业的规划
    简要概述java内存模型,以及volatile关键字
    Spring详细教程
    java线程中yield(),sleep(),wait()区别详解
    利用kubeadm快速搭建Kubernetes学习环境
    vue 使用el-time-picker,把数组拆分成单个属性
    Vue+docxtemplater导出到word(包含批量转出图片)!!!
  • 原文地址:https://www.cnblogs.com/jiangyu0331/p/14336138.html
Copyright © 2020-2023  润新知