diff 中有两个相同文件的无声结果:如何显示它们?

Fez*_*ezZ 7 diff shell-script file-comparison

当我设置-s参数时,diff也会打印不同的文件。

diff -s $FIRST_FILE $SECOND_FILE
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 9

Unix 的理念是每个作业有一个工具,而 shell 将它们粘合在一起。所以:一种比较的工具,一种获得所需输出格式的工具。

在这种情况下,输出格式足够简单,这部分可以直接用 shell 完成。

要比较两个文件,如果您只关心它们是否具有相同的内容而不是列出差异,请使用cmp.

if cmp -s -- "$FIRST_FILE" "$SECOND_FILE"; then
  printf '%s\n' "$FIRST_FILE = $SECOND_FILE"
fi
Run Code Online (Sandbox Code Playgroud)


Ste*_*itt 5

默认情况下,diff当给出相同的文件时是静默的;这是其行为-s发生变化的唯一方面。所以总是比较文件,输出差异;-s当文件相同时,它也会输出一条消息,没有-s它根本没有提到相同的文件。

您可以通过组合-q和来获得我认为您正在寻找的行为-s-q指示diff仅指示文件不同(当它们不同时),而不详细说明差异。

下面是一个例子:

$ echo 1 > a
$ echo 2 > b
$ echo 2 > c
$ diff -qs a b
Files a and b differ
$ diff -qs b c
Files b and c are identical
Run Code Online (Sandbox Code Playgroud)


Jua*_*cia 5

一种可能的解决方案可能是:

diff -s $FIRST_FILE $SECOND_FILE > /dev/null
if [ $? -eq 0 ]; then
    echo "The files are identical"
fi
Run Code Online (Sandbox Code Playgroud)

注意:它更改了问题文本。

  • 正如已经指出的,在这种情况下 `cmp` 确实更好,因为它不会浪费时间试图构建一个好的补丁。 (2认同)