一个 shell 脚本,它显示两个不同目录中多个文件的差异,还可能创建一个输出文件,其中包括所有不匹配的位置。
健康)状况
文件 dir1/file1 仅与 dir2/file1 比较(对于其他文件类似 - file2 与 file2 比较)
如果发现任何更改:状态应为“例如在文件 file1 中找到未匹配项”,并且所有其他文件也应执行相同操作,并将所有结果写入一个文件
提前致谢
一个 shell 脚本,它显示两个不同目录中多个文件的差异,还可能创建一个输出文件,其中包括所有不匹配的位置。
健康)状况
文件 dir1/file1 仅与 dir2/file1 比较(对于其他文件类似 - file2 与 file2 比较)
如果发现任何更改:状态应为“例如在文件 file1 中找到未匹配项”,并且所有其他文件也应执行相同操作,并将所有结果写入一个文件
提前致谢
使用差异命令。使用该-r
标志,您可以递归地比较文件夹:
diff -ur dir1 dir2
输出将采用patch
命令可以理解的格式。您可以将其保存在文件中并将这些更改应用于dir1
使用
diff -ur dir1 dir2 > my.patch
cd dir1
patch -p1 < ../my.patch
如果您处理文本文件并只想查看差异,我会按照 hek2mgl 的建议自定义差异输出。但是如果你想要更多的控制,例如在找到不同的文件后执行一些命令或者你必须比较二进制文件,你可以使用find
and 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"
根据您的情况(如果文件名不包含空格,没有丢失的文件等),您可能会省略某些部分 - 这只是根据更大的脚本量身定制的。