繁体   English   中英

比较Linux中两个不同目录中的文件

[英]Compare files in two different directories in Linux

一个Shell脚本,它显示两个不同目录中多个文件的差异,并且还可能创建一个包含所有不匹配项的输出文件。

条件

  1. 文件dir1 / file1仅与dir2 / file1比较(其他文件类似-file2与file2比较)

  2. 如果发现任何变化:状态应为“例如文件file1中未找到匹配项”,所有其他文件也应执行相同操作,并将所有结果写入一个文件中

提前致谢

使用diff命令。 使用-r标志,您可以递归比较文件夹:

diff -ur dir1 dir2

输出将采用patch命令可以理解的格式。 您可以将其保存在文件中,然后使用以下命令将这些更改应用于dir1

diff -ur dir1 dir2 > my.patch
cd dir1
patch -p1 < ../my.patch

如果要处理文本文件,并且只想看一下差异,我将按照hek2mgl的建议自定义diff输出。 但是,如果您想获得更多控制权,例如在找到不同的文件后执行某些命令,或者必须比较二进制文件,则可以利用findcmp
下面是您可以自定义的示例:

#!/bin/bash
IFS_SAVE="$IFS"
IFS=$'\x0a'

for f in $(find dir1 -type f -printf "%f\n"); do {
    f1="dir1/$f"
    f2="dir2/$f"
    cmp --quiet "$f1" "$f2"
    check=$?
    if [ $check -eq 0 ] ; then
        echo -e "OK: $f"
    elif [ $check -eq 1 ] ; then
        echo -en "Mismatch FOUND in files: "
        filesize1=$(stat --printf="%s" "$f1" )
        filesize2=$(stat --printf="%s" "$f2" )
        echo "$f1" size:"$filesize1" "$f2" size:"$filesize2" check:"$check" 
        #you may put diff ... or anything else here
    else 
        echo "cannot compare files, probably $f2 is missing"
    fi
} ; done
IFS="$IFS_SAVE"

根据您的情况(如果文件名不包含空格,没有丢失的文件等),您可能会省略一些部分-这是从较大的脚本中剪裁而来的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM