我想知道是否有人可以告诉我,如果有一个可用的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#将会打印