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
廣告