我有许多文件,我想检查所有那些文件是否具有相同的内容。
我可以使用哪个命令行来检查?
用法可能类似于:
$ diffseveral file1 file2 file3 file4
结果:
All files equals
要么
Files are not all equals
我有许多文件,我想检查所有那些文件是否具有相同的内容。
我可以使用哪个命令行来检查?
用法可能类似于:
$ diffseveral file1 file2 file3 file4
结果:
All files equals
要么
Files are not all equals
Answers:
使用GNU diff,将其中一个文件作为参数传递给--from-file
其他文件,并将其他文件作为操作数传递:
$ diff -q --from-file file1 file2 file3 file4; echo $?
0
$ echo >>file3
$ diff -q --from-file file1 file2 file3 file4; echo $?
Files file1 and file3 differ
1
下面的代码应该很容易解释。 $#
是文件参数的数量,shift
一次只消耗一个。用途cmp -s
无声字节方式的比较。
#!/bin/sh
# diffseveral
if [ $# -lt 2 ]; then
printf '%s\n' "Usage: $0 file1 file2 [files ...]" >&2
exit 2
fi
oldfile="$1"
shift
while [ $# -gt 0 ]; do
newfile="$1"
if ! cmp -s "$oldfile" "$newfile"; then
echo 'Files differ.'
exit 1;
fi
shift
done
echo 'All files identical.'
exit 0
您一次只能diff
两个,但是检查它们是否相等相当容易:
if diff file1 file2 && diff file2 file3 && diff file3 file4; then
echo All equal
else
echo Not
fi
如果您有足够的理由来证明循环,请使用以下方法:
alleq () {
for file; do
diff -q "$1" "$file" >/dev/null || return 1
done
}
if alleq file1 file2 ...; then
echo All equal
else
echo Not
fi