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-rD1D2命令显示目前在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