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

Mas*_*der 13 unix bash cmp

我想知道是否有人可以告诉我unix中是否有可用的功能,bash比较文件的所有行.如果它们不同,则应输出true/false或-1,0,1.我知道这些cmp函数存在于其他语言中.我一直在寻找手册页,但都没有成功.如果没有,有人可以帮我提出替代解决方案吗?

谢谢

Dav*_* W. 33

做这件事有很多种方法:

  • 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
Run Code Online (Sandbox Code Playgroud)

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


Jan*_*lho 6

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

if cmp file1 file1; then
    ...
fi
Run Code Online (Sandbox Code Playgroud)

希望这有助于=)

  • 只是打败了我.:-)添加`-s`选项将确保它对于不同的文件是静默的,并且只提供返回代码,因此您不会获得额外的输出 (2认同)

Jer*_*her 0

您可以对两个文件执行md5,然后比较bash.

这里没有 Unix 机器可供测试,但这应该是正确的。

#!/bin/bash

md1=$(md5 file1);
md2=$(md5 file2);

if [ $md1 -eq $ $md2 ]; then
  echo The same
else
  echo Different
fi
Run Code Online (Sandbox Code Playgroud)