如何在 Linux 中使用 diff 命令?

想知道如何在 Linux 中使用 diff 命令并想知道 Linux diff 命令是什么? 本文将帮助您更好地理解该命令,并回答有关 diff 命令用法的问题。 diff 命令的主要用途是在 Linux 中查找两个文件之间的差异。

Linux 中 diff 命令的选项:

  • -Y 用于并排显示文件中的差异
  • -s 这可以与其他命令结合使用,以通知两个文件是否相同
  • -r 如果指定了目录,此选项将比较找到的任何子目录。
  • -一世 由于 Linux 区分大小写,因此此选项将忽略所有区分大小写的差异。
  • -B 忽略空白行,不要将它们显示为输出中的差异
  • -w 忽略差异中的空格

使用 Linux diff 命令比较两个文件

让我们创建两个内容相似但有一些细微差别的文件。 这是我正在使用的两个文件:

[email protected]:~# cat LinuxForDevices.txt  This is some sample text I'm going to write a different line in another file   [email protected]:~# cat LFD.txt  This is some sample text I'm going to write a different line in another file named LFD.txt An additional line 

如您所见,有两个文件名为 LinuxForDevices.txtLFD.txt 唯一的区别是最后一行添加了“named LFD.txt”部分。

让我们运行 Linux diff 命令并找出两个文件之间的差异。

[email protected]:~# diff LinuxForDevices.txt LFD.txt  3c3,4 < in another file --- > in another file named LFD.txt > An additional line 

没有任何参数,它会显示两个文件中不同的行。 让我们再讨论一下输出:

  • 数字 3c3, 4 代表 file1 中的第 3 行 C从file2挂到第3,4行。
  • 标记表示第一个文件(LinuxForDevices.txt),而 > 标记表示文件 2 (LFD.txt)
  • 中间的连字符用于区分这两个文件。

在 Linux 中使用 diff 命令并排显示差异

在上面的示例中,您看到命令输出一个接一个地显示结果。 但是对于较大的文件,最好并排查看结果。 这可以通过 -Y 选项。

[email protected]:~# diff -y LinuxForDevices.txt LFD.txt 

添加 -Y Linux diff 命令的选项现在将显示如下输出。

[email protected]:~# diff -y LinuxForDevices.txt LFD.txt  This is some sample text                                        This is some sample text I'm going to write a different line                             I'm going to write a different line in another file                                               | in another file named LFD.txt                                                               > An additional line 

完美,这正是我们想要看到的!

在 Linux 中使用 diff 命令通知相同的文件

默认情况下,如果文件完全相同,Linux diff 命令不会显示任何输出。 但是添加 -s 选项将打印一个输出,说明这两个文件是相同的。

为了演示,我创建了文件 LFD.txt 的副本并将其命名为 LFD-copy.txt

[email protected]:~# diff -s LFD.txt LFD-copy.txt 
diff 命令相同的文件

正如您在上面的屏幕截图中看到的那样,当我在没有 -s 选项,该命令不产生任何输出。

使用 Linux diff 命令的目录内容差异

如果您正在处理包含大量文件的多个目录,而不是查找文件中的差异,则 diff 命令可以帮助您识别存在于一个目录中而不存在于另一个目录中的文件。 这可以使用 -r 命令选项。

正如我们上面所讨论的,Linux 区分大小写的特性也会将具有不同大小写的相同文件名视为两个不同的文件。 为了避免这种情况,我们可以使用 –忽略文件名大小写 选项。

为了证明这一点,我使用 mkdir 命令创建了一个包含两个子文件夹的文件夹,并将我们的 3 个文件移动到其中。 这是我的目录和文件结构。

树形结构

现在下一步是使用 diff 命令找出两个目录之间的差异,我们将使用 -r 命令选项。

[email protected]:~# diff -r folder-1/ folder-1/folder-2/ Only in folder-1/: folder-2 Only in folder-1/: folder-3 Only in folder-1/: LFD.txt Only in folder-1/folder-2/: LinuxForDevices.txt 

这个目录结构非常简单,但可以证明递归是如何工作的。 此命令选项允许 diff 命令查看目录并比较其中的所有文件和目录。

在 Linux 中使用 diff 命令忽略空白链接和空格

有些文件只会有很多空白行和空格,它们会通过将空白突出显示为差异来不必要地加载屏幕。 我们可以忽略这些空白,使用 -B-w 选项。 让我们看看使用这两个命令时输出有何不同。

我在我们的 LinuxForDevices.txt 文件中添加了额外的空白行。

[email protected]:~# cat LinuxForDevices.txt  This is some sample text  I'm going to write a different line  in another file 

现在让我们看看 Linux 中的 diff 命令作为输出显示的内容。

Linux 空行中的 Linux Diff 命令差异命令空行

如您所见,空白行突出显示为差异,第一行表示 2d1 这意味着需要从第一个文件中删除第二行。

[email protected]:~# diff -B LinuxForDevices.txt LFD.txt  4,5c3,4 <  < in another file --- > in another file named LFD.txt > An additional line 

如您所见,通知我们删除第二行的第一行不再显示。 但是 LinuxForDevices.txt 中的一个空白行仍然出现。 那是因为我们在 LFD.txt 文件中缺少了一行额外的文本。 它希望我们用 LFD.txt 的最后两行替换 LinuxForDevices 的最后两行,以使它们相同。

如果我们更换 -B-w,而不是忽略空白行,它将忽略空格而不是整个空白行。 但是如果你想让输出忽略空白行和空格,你可以使用命令 差异-Bw.

在 Linux 中使用 diff 命令忽略文本大小写

为了演示和解释区分大小写,我们将创建两个只有一个单词“Hello”的新文件。 我创建了两个文件 1.txt 和 2.txt,分别带有“Hello”和“hello”这两个词。

如果我在没有任何参数的情况下运行 diff 命令,您会看到它突出显示了单词之间的大小写差异作为文件之间的“差异”。

[email protected]:~# diff 1.txt  2.txt  1c1 < Hello --- > hello 

但是通过简单的添加 -一世 将忽略此差异,文件将被视为相同。 正如我们之前看到的,相同的文件没有输出,我们还将添加 -s 选项。

[email protected]:~# diff -s -i 1.txt 2.txt  Files 1.txt and 2.txt are identical 

完美的! 这正是我们所期望的。

结论

为了结束本教程关于 Linux 中的 diff 命令,我想让您知道,我在上面演示的不同选项不应被视为彼此独立。 尽管它们实际上并不需要与其他选项一起使用,但您绝对应该组合适合您要求的选项。

尽管这个演示列表应该可以满足您的大部分需求,但您当然应该使用 man 命令查看该命令的手册页。

参考:

  • Linux 中的 diff 命令 – 手册页链接