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 次瀏覽

啟動你的 職業生涯

完成課程獲得認證

開始
廣告