介紹在 Linux 系統中如何使用 diff
指令比較兩個目錄,快速找出有差異的檔案以及內容。
比較目錄差異
Linux 的 diff
指令最常拿來比較不同檔案之間的差異,但它也以用於比對整個目錄下的所有檔案。
# 比較兩個目錄內檔案的差異,列出所有差異處 diff -bur folder1/ folder2/
只在 folder1/ 存在:cfg2.py diff --color -bur folder1/data.txt folder2/data.txt --- folder1/data.txt 2020-03-02 08:21:10.960236700 +0800 +++ folder2/data.txt 2020-03-06 16:38:37.551001497 +0800 @@ -1,6 +1,5 @@ -3 0.064 0.053 -2 0.120 0.241 --1 0.176 0.398 0 0.199 0.241 1 0.176 0.053 2 0.120 0.004 只在 folder2/ 存在:data.txt~ 只在 folder2/ 存在:.data.txt.un~ 只在 folder2/ 存在:text.dat
這裡用的 -b
參數是代表忽略空白的差異,-u
是以 unified 格式輸出檔案內容的差異,而 -r
則是以遞迴方式檢查所有子目錄。
只列出差異檔案名稱
如果只需要列出兩個目錄中有差異的檔案名稱,不列出有差異的檔案內容,可以改用 -qr
參數:
# 比較兩個目錄內檔案的差異,只列出有差異的檔案名稱 diff -qr folder1/ folder2/
只在 folder1/ 存在:cfg2.py 檔案 folder1/data.txt 與 folder2/data.txt 不同 只在 folder2/ 存在:data.txt~ 只在 folder2/ 存在:.data.txt.un~ 只在 folder2/ 存在:text.dat
若差異的檔案名稱數量較多,在輸出時會有點雜亂,可以加上 sort
將結果依據類型排序:
# 排序整理輸出 diff -qr folder1/ folder2/ | sort
只在 folder1/ 存在:cfg2.py 只在 folder2/ 存在:data.txt~ 只在 folder2/ 存在:.data.txt.un~ 只在 folder2/ 存在:text.dat 檔案 folder1/data.txt 與 folder2/data.txt 不同
參考資料:Stack Overflow