diff — 比較兩個檔案的差異

逐行比較兩個文字檔案並顯示差異。

語法

diff [選項] 檔案1 檔案2

常用選項

選項 說明 範例
-u, --unified[=N] 統一格式(前後各 N 行 context,最常用) diff -u old.txt new.txt
-i, --ignore-case 忽略大小寫差異 diff -i file1 file2
-w, --ignore-all-space 忽略所有空白差異 diff -w file1 file2
-r, --recursive 遞迴比較目錄 diff -r dir1/ dir2/
-q, --brief 只顯示檔案是否不同,不顯示詳細 diff -q file1 file2
-b, --ignore-space-change 忽略空白數量差異 diff -b file1 file2
--color 以顏色標示差異 diff --color file1 file2

使用範例

範例 1:基本比較

輸出中 < 代表第一個檔案的行,> 代表第二個檔案的行。

$ diff config.old.yml config.yml
3c3
< port: 8080
---
> port: 80
7d6
< debug: true
範例 2:統一格式(最常用,git diff 的格式)

-u 輸出更易讀:- 代表刪除行,+ 代表新增行,@@ 顯示行號範圍。

$ diff -u config.old.yml config.yml
--- config.old.yml	2026-05-01
+++ config.yml	2026-05-20
@@ -1,7 +1,6 @@
 host: localhost
-port: 8080
+port: 80
-debug: true
範例 3:產生 patch 補丁檔

將 diff 輸出重導向到 .patch 檔,可用 patch 指令套用到其他主機。

$ diff -u original.conf modified.conf > changes.patch
範例 4:遞迴比較兩個目錄

比較兩個目錄的所有檔案差異,常用於確認部署的變更範圍。

$ diff -rq /etc/nginx/ /etc/nginx.backup/
Files /etc/nginx/nginx.conf and /etc/nginx.backup/nginx.conf differ

常見錯誤與排錯

diff: /path: Is a directory
原因
比較目錄時未加 -r 選項。
解法
加上 -r 進行遞迴目錄比較。

延伸閱讀