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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP