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