在 Linux 系統中比較兩個目錄?
簡介
比較兩個目錄是很常見的情況。許多不同的因素促使我們想要找出兩件事之間是否存在真正的差異。例如,當出現問題時,我們通常希望找出與先前情況的不同之處。
我們將學習如何使用命令列進行目錄比較。我們可以使用不同的方法來比較目錄列表。我們還將瞭解一些最常用的命令及其選項。
設定
在本教程中,我們將在 /temp 目錄內建立一些示例目錄。
Dir1 Dir2 ├── client.log ├── client.log ├── file01 ├── file01 ├── file02 ├── file02 ├── file03 ├── file03 │ ├── file04 ├── server.log ├── server.log ├── subdir1 ├── subdir1 │ ├── file11 │ ├── file11 │ └── file12 │ └── file12 ├── subdir2 └── subdir2 │ ├── file21 ├── file21 │ └── file22 ├── file22 └── subdir3 └── file23 ├── file31 └── file32
示例必須包含至少兩種檔案:相同的(檔名、大小等相同)和不同的(檔名、大小等不同)。這樣我們就可以輕鬆比較不同比較工具的結果。
命令列工具
我們幾乎總是可以使用一個名為 diff 的舊 Unix 實用程式來檢視兩個檔案(或目錄)的不同之處。diff 實用程式用於比較檔案,它能夠比較目錄和檔案。有很多選項,但其中兩個對我們的案例最有用。以下是一些幫助您檢視不同型別的檔案格式和目錄的遞迴內容的命令示例:
diff --brief --recursive Dir1 Dir2 Files Dir1/client.log and Dir2/client.log differ Files Dir1/file02 and Dir2/file02 differ Files Dir1/file03 and Dir2/file03 differ Only in Dir2: file04 Files Dir1/subdir1/file12 and Dir2/subdir1/file12 differ Files Dir1/subdir2/file22 and Dir2/subdir2/file22 differ Only in Dir2/subdir2: file23 Only in Dir1: subdir3
另一個用於比較兩個列表的有用選項是 --exclude,它允許我們過濾掉我們不感興趣的一個列表中的元素。要從上面顯示的示例中排除所有 .log 檔案,我們將執行以下命令:
diff --brief --recursive Dir1 Dir2 --exclude '*.log' Files Dir1/file02 and Dir2/file02 differ Files Dir1/file03 and Dir2/file03 differ Only in Dir2: file04 Files Dir1/subdir1/file12 and Dir2/subdir1/file12 differ Files Dir1/subdir2/file22 and Dir2/subdir2/file22 differ Only in Dir2/subdir2: file23 Only in Dir1: subdir3
我們應該記住,diff 實用程式使用檔案內容進行比較,這在比較大量檔案時可能會導致明顯的延遲。
終端檔案管理器
一些檔案管理器也提供檔案管理器目錄比較功能。要在 Midnight Commander 中比較兩個目錄,可以使用命令/比較目錄選單選項或 ctrl+x d 鍵盤組合。選擇它們時將顯示不同的選項:

它不會使其遞迴,但我們可以根據時間戳、大小和內容分別選擇快速、僅大小和徹底的選項。
Vifm 中的檔案比較比目錄比較更高階。它們預設是遞迴的。如果您想檢視左右面板中檔案的差異,只需執行 -filemanager internal :comparedir 命令即可。它顯示一個條目列表,突出顯示其中一些條目,並將其他條目顯示為虛線。
GUI 方法
如果系統上可以使用圖形桌面,那麼我們可以使用更強大的工具。Meld 就是這樣一個例子。比較的結果非常清晰——我們可以輕鬆地看到哪些專案不同,以及比較雙方缺少哪些專案。

此外,此時,您可以透過雙擊 Windows 資源管理器中的特定檔名來檢視每個檔案內容的差異。您還可以按類別進行篩選:
最後,我們可以選擇按內容比較或僅比較時間戳,這可能會大大提高比較速度。
結論
我們已經看到了幾種在 Linux 上比較目錄內容的不同方法。
我們首先演示了適用於所有 Linux 作業系統的 CLI 方法。接下來,我們使用高階工具檢查了一些更直觀的方法。我們還討論了一些可能影響比較效能的因素。
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP