一个 shell 脚本,显示两个不同目录中多个文件的差异,还可能创建一个输出文件,包括发现所有不匹配的位置。
状况
文件 dir1/file1 仅与 dir2/file1 比较(其他文件类似 - file2 与 file2 比较)
如果发现任何更改:状态应为“例如,在文件 file1 中发现未匹配”,并且所有其他文件也应执行相同的操作,并将所有结果写入一个文件
提前致谢
使用 diff 命令。使用
-r
标志,您可以递归比较文件夹:
diff -ur dir1 dir2
输出将采用
patch
命令理解的格式。您可以将其保存在文件中并使用 将这些更改应用到
dir1
diff -ur dir1 dir2 > my.patch
cd dir1
patch -p1 < ../my.patch
如果您处理文本文件并且只想查看差异,我会自定义 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"
根据您的情况(如果文件名不包含空格、没有丢失文件等),您可以省略某些部分 - 这只是根据较大的脚本定制的。
Kodi Linux“开箱即用”不支持 cmp 或 diff。
有人知道如何在 Kodi 命令行上比较文件吗?
提前感谢...
最诚挚的问候, 保罗·弗林特,导演 巴雷开放系统研究所