如何在 Linux 中比较两个目录?
简介
比较两个目录是很常见的。许多不同的因素促使我们想要确定两个目录之间是否真的存在差异。例如,当出现问题时,我们通常想找出与之前情况有何不同。
我们将学习如何使用命令行执行目录比较。我们可以使用不同的方法来比较目录列表。我们还将了解一些最常用的命令及其选项。
设置
在本教程中,我们将在 /temp 目录中创建一些示例目录。
Dir1 Dir2 ├── client.log ├── client.log ├── file01 ├── file01 ├── file02 ├── file02 ├── file03 ├── file03 │ ├── file04 ├── server.log ├── server.log ├── subdir1 ├── subdir1 │ ├── file11 │ ├── file11 │ └── file12 │ └── file12 ├── subdir2 └── subdir2 │ ├── file21 ├── file21 │ └── file22 ├── file22 └── subdir3 └── file23 ├── file31 └── file32
样本必须包含至少两种类型的文件:相同的文件(文件名、大小等相同)和不同的文件(文件名、大小等不同)。这样我们就能轻松地比较不同比较工具的结果。
命令行实用程序
我们几乎总是可以使用一个名为 diff 的旧 Unix 实用程序来查看两个文件(或目录)的差异。diff 实用程序用于比较文件,它既可以比较文件,也可以比较目录。它有很多选项,但其中两个对我们的案例最有用。以下是一些命令示例,可帮助您以递归方式查看不同类型的文件格式和目录的内容 -
diff --brief --recursive Dir1 Dir2 Files Dir1/client.log and Dir2/client.log differ Files Dir1/file02 and Dir2/file02 differ Files Dir1/file03 and Dir2/file03 differ Only in Dir2: file04 Files Dir1/subdir1/file12 and Dir2/subdir1/file12 differ Files Dir1/subdir2/file22 and Dir2/subdir2/file22 differ Only in Dir2/subdir2: file23 Only in Dir1: subdir3
比较两个列表的另一个有用选项是 −−exclude,它允许我们从一个列表中过滤掉我们不感兴趣的元素。要从上面显示的示例中排除所有 .log 文件,我们可以运行以下命令 −
diff --brief --recursive Dir1 Dir2 --exclude '*.log' Files Dir1/file02 and Dir2/file02 differ Files Dir1/file03 and Dir2/file03 differ Only in Dir2: file04 Files Dir1/subdir1/file12 and Dir2/subdir1/file12 differ Files Dir1/subdir2/file22 and Dir2/subdir2/file22 differ Only in Dir2/subdir2: file23 Only in Dir1: subdir3
需要注意的是,diff 实用程序会根据文件内容进行比较,这在比较大量文件时可能会导致显著的延迟。
终端文件管理器
某些文件管理器也提供文件管理器目录比较功能。要在 Midnight Commander 中比较两个目录,请使用 command/compare directory 菜单选项或 ctrl+x d 键盘组合键。选择后会显示不同的选项 -

它不会进行递归,但我们可以根据时间戳、大小和内容分别选择"快速"、"仅大小"和"彻底"选项。
Vifm 中的文件比较比目录比较更高级。它们默认是递归的。如果您想查看左右面板中文件之间的差异,只需运行 -filemanager 内部的 :comparedir 命令即可。它会显示一个条目列表,突出显示其中一些条目,并将其他条目显示为虚线。
GUI 方法
如果系统上有可用的图形桌面,那么我们可以使用更强大的工具。Meld 就是一个例子。比较结果非常清晰——我们可以轻松地看到比较双方哪些项目存在差异以及哪些项目缺失。

此外,此时,您可以通过在 Windows 资源管理器中双击特定文件名来查看每个文件内容之间的差异。您还可以按类别进行筛选 -
最后,我们可以选择按内容比较或仅按时间戳比较,这可能会显著提高比较速度。
结论
我们已经了解了几种在 Linux 上比较目录内容的不同方法。
我们首先演示了适用于所有 Linux 操作系统的 CLI 方法。接下来,我们研究了一些使用高级工具的更直观的方法。我们还讨论了一些可能影响比较性能的因素。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

