Files

比較兩個文件夾/磁碟的內容(包括時間戳、權限)

  • May 18, 2021

我在兩個不同的硬碟上有兩個目錄,想檢查內容是否真的完全相同。根據我閱讀的內容,我可以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告訴你:

  • 路徑根目錄本身 ( .) 具有不同的時間戳
  • 有一個額外的條目沒有出現ehostB``hostA
  • 兩台主機的entry的修改時間b/BB不同(但內容不一樣)
  • 兩個主機之間的修改時間和SHA256條目的內容(雜湊)不同b/B
  • 兩台主機的進入權限c/C不同
  • hostB缺少條目./d

引用自:https://unix.stackexchange.com/questions/650274