Linux – 如何查找一个目录中存在但在另一个目录中不存在的文件?


让我们考虑一个案例,我们有两个目录,例如 **d1** 和 **d2**,这两个目录都包含一些文件,这些文件可能是相同的或不同的。现在,我们想要列出那些在一个目录(例如 **d1**)中存在但在另一个目录(例如 **d2**)中不存在的文件的名称。

为了做到这一点,我们必须熟悉 **diff** 命令或 **comm** 命令,因为这两个命令都可以用来解决上述问题。

让我们首先探索 diff 命令,它是 **difference** 的缩写。此命令用于查找两个文件之间的差异,因为它逐行比较这两个文件。

让我们探索一下我们有两个目录 **d1** 和 **d2** 的情况,并且这两个目录中都包含一些文件。

考虑以下终端输出,它描述了这两个目录:

immukul@192 linux-questions-code % ls -ltr
total 0
drwxr-xr-x 5 immukul staff 160 Jul 3 20:03 d1
drwxr-xr-x 4 immukul staff 128 Jul 3 20:03 d2

现在,第一个目录 **d1** 的内容如下所示:

immukul@192 d1 % ls -ltr
total 0
-rw-r--r-- 1 immukul staff 0 Jul 3 20:03 1.txt
-rw-r--r-- 1 immukul staff 0 Jul 3 20:03 3.txt
-rw-r--r-- 1 immukul staff 0 Jul 3 20:03 5.txt

现在,第二个目录 **d2** 的内容如下所示:

immukul@192 d2 % ls -ltr
total 0
-rw-r--r-- 1 immukul staff 0 Jul 3 20:03 2.txt
-rw-r--r-- 1 immukul staff 0 Jul 3 20:03 3.txt

现在,我们只需要第一个目录中存在但在第二个目录中不存在的文件。为此,我们只需要在终端中写入以下命令:

diff -r d1 d2 | grep d1 | awk '{print $4}'

让我们分解上面的命令以更好地理解它:

  • **diff -r d1 d2** 命令显示存在于 d1 中但不存在于 d2 中的文件,以及存在于 d1 中的文件的更改。

  • **grep d1** 命令仅显示 d1 的文件。

  • awk **‘{print $4}’** 用于打印这些文件的名称。

输出

immukul@192 linux-questions-code % diff -r d1 d2 | grep d1 | awk '{print $4}'
1.txt
5.txt

我们也可以使用 Linux 提供的 **comm** 命令来实现相同的输出。

只需在终端中键入以下命令:

comm -23 <(ls d1 |sort) <(ls d2|sort)

输出

immukul@192 linux-questions-code % comm -23 <(ls d1 |sort) <(ls d2|sort)
1.txt
5.txt

更新于:2021年7月29日

606 次浏览

启动你的 职业生涯

完成课程获得认证

开始
广告
© . All rights reserved.