0

一个 shell 脚本,它显示两个不同目录中多个文件的差异,还可能创建一个输出文件,其中包括所有不匹配的位置。

健康)状况

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

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

提前致谢

4

2 回答 2

2

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

diff -ur dir1 dir2

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

diff -ur dir1 dir2 > my.patch
cd dir1
patch -p1 < ../my.patch
于 2016-11-14T18:06:38.447 回答
0

如果您处理文本文件并只想查看差异,我会按照 hek2mgl 的建议自定义差异输出。但是如果你想要更多的控制,例如在找到不同的文件后执行一些命令或者你必须比较二进制文件,你可以使用findand cmp
以下是示例,您可以自定义:

#!/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"

根据您的情况(如果文件名不包含空格,没有丢失的文件等),您可能会省略某些部分 - 这只是根据更大的脚本量身定制的。

于 2016-11-14T21:59:52.767 回答