比较Unix中两个文本文件的比较函数

我想知道是否有人可以告诉我,如果有一个可用的unix函数,bash比较文件的所有行。 如果他们不同,它应该输出真/假,或-1,0,1。 我知道这些cmp函数存在于其他语言中。 我一直在看附近的手册页,但没有成功。 如果它不可用,有人可以帮我想出一个替代解决scheme吗?

谢谢

做这件事有很多种方法:

  • cmp -s $file1 $file2 :看看$?的值$? 。 如果两个文件匹配,则为零,否则为零。
  • diff $file1 $file2 > /dev/null :某些形式的diff命令可以使用一个参数来告诉它不输出任何内容。 但是,大多数不。 毕竟,你使用diff来查看两个文件之间的差异。 同样,退出代码(如果文件匹配,您可以检查$?的值将为0,否则为非零)。

你可以在shell的if语句中使用这些命令:

 if cmp -s "$file1" "$file2" then echo "The files match" else echo "The files are different" fi 

diff命令专门用于文本文件。 cmp命令也适用于所有的二进制文件。

有一个简单的cmp file file命令可以做到这一点。 如果它们相等,则它返回0,如果它们不相同则返回1,所以在if使用它是微不足道的:

 if cmp file1 file1; then ... fi 

希望这有助于=)

您可以使用diff来输出两个文件之间的差异,如果不同则返回1,如果相同则返回0。

 $> echo toto > file1; echo tota file2; diff file1 file2 1c1 < toto --- > tota 
 #!/bin/bash file1=old.txt file2=new.txt echo " TEST 1 : " echo if [ $( cmp -s ${file1} ${file2}) ] then echo "The files match" else echo "The files are different" fi echo echo " TEST 2 : " echo bool=$(cmp -s "$file1" "$file2" ) if cmp -s "$file1" "$file2" then echo "The files match" else echo "The files are different" fi echo echo " TEST 3 : " echo md1=$(md5 ${file1}); md2=$(md5 ${file2}); mdd1=$(echo $md1 | awk '{print $4}' ) mdd2=$(echo $md2 | awk '{print $4}' ) echo $md1 echo $mdd1 echo $md2 echo $mdd2 echo if [ $mdd1 = $mdd2 ]; then echo "The files match" else echo "The files are different" fi 

你可以在两个文件上做一个md5 ,然后在bash比较结果。

在这里没有任何Unix框来测试,但这应该是正确的。

 #!/bin/bash md1=$(md5 file1); md2=$(md5 file2); if [ $md1 -eq $ $md2 ]; then echo The same else echo Different fi 

echo“读取第一个文件”读取f1 echo“读取第二个文件”读取f2

如果两个文件完全相同,diff -s f1 f2#将会打印