Files
比較兩個文件夾/磁碟的內容(包括時間戳、權限)
我在兩個不同的硬碟上有兩個目錄,想檢查內容是否真的完全相同。根據我閱讀的內容,我可以
diff -rq dir1 dir2
用來檢查文件是否失去或不同。
-q
,--brief
僅在文件不同時報告
-r
,--recursive
遞歸比較找到的任何子目錄
但是據我所知,diff 不會檢查權限或時間戳是否不同。是否有另一個用於 diff 或其他工具的參數也可以檢查?
mtree(8)
是一個很好的工具:命令:
$ mtree -cp path/on/hostA -K sha256 | ssh hostB mtree -p path/on/hostB
將報告層次結構
hostA:path/on/hostA
和層次結構在hostB:path/on/hostB
類型、大小、時間戳、權限和內容方面的差異。此外,還會報告缺失條目(未在 上找到hostB
)或無關條目(僅在 上找到hostB
)。如果繼承權相同,
mtree
將不發出任何輸出並返回退出程式碼 0:$ mtree -cp path/on/hostA -K sha256 | ssh hostB mtree -p path/on/hostB && echo match match
否則,
mtree
將返回非零退出程式碼,並逐項列出不同的條目:# create some differences on hostB: $ ssh hostB 'rmdir path/on/hostB/d' $ ssh hostB 'mkdir path/on/hostB/e' $ ssh hostB 'date > path/on/hostB/b/B' $ ssh hostB 'touch path/on/hostB/b/BB' $ ssh hostB 'chmod 644 path/on/hostB/c/C' # and then compare: $ mtree -cp path/on/hostA -K sha256 | ssh hostB mtree -p path/on/hostB || echo fail .: modification time (Tue May 18 13:27:20 2021, Tue May 18 13:45:06 2021) extra: e b/BB: modification time (Tue May 18 13:27:28 2021, Tue May 18 13:50:01 2021) b/B: modification time (Tue May 18 13:27:03 2021, Tue May 18 13:46:04 2021) sha256 (0x4f7986b5a925296c575043e73e76b59b6eb84da37c50f2e86baaafc75e2fcdca, 0x46f3f4e748cfef2a4cd679d6c9723cb44eb0526b760854fcef33bb97ca27fae2) c/C: permissions (0600, 0644) missing: ./d fail
一行一行的
mtree
告訴你:
- 路徑根目錄本身 (
.
) 具有不同的時間戳- 有一個額外的條目沒有出現
e
在hostB``hostA
- 兩台主機的entry的修改時間
b/BB
不同(但內容不一樣)- 兩個主機之間的修改時間和
SHA256
條目的內容(雜湊)不同b/B
- 兩台主機的進入權限
c/C
不同hostB
缺少條目./d