根據校驗和遞歸區分兩個目錄?

根據校驗和遞歸區分兩個目錄?

我試著透過內容的校驗和來找出哪些檔案不存在。我有兩個目錄/foo/bar這兩個目錄代表系統上的任意狀態,我想找到所有文件在 root 中/bar不存在於 root 中/foo(遞歸地)。/bar/**與的字典

CheckSum -> filepath

/foo/**減去with的字典

CheckSum -> filepath  

我可以使用 md5sum 或其他東西來編寫此內容,但必須已經有一個實用程式可以執行此操作。

需要明確的是,如果兩個文件相同除了按位置(名稱和路徑)我希望它們被識別為相同的。

測試用例

讓我們用一些測試資料來創建一棵樹,

/tmp/foo
└── myFile (duplicate of /tmp/bar/quz/asdf/otherFileName)
/tmp/bar
├── qaz
│   └── findMe
└── quz
    └── asdf
        └── otherFileName (duplicate of /tmp/foo/myFile)

創作腳本,

mkdir -p /tmp/foo /tmp/bar/quz/asdf /tmp/bar/qaz

# One file that exists in both locations
dd if=/dev/urandom of=/tmp/foo/myFile bs=1k count=10
cp /tmp/foo/myFile /tmp/bar/quz/asdf/otherFileName

# One file (findMe) that exists in only /mpt/bar/
dd if=/dev/urandom of=/tmp/bar/qaz/findMe bs=1k count=10

所以程序比較/tmp/foo/tmp/bar應該發現/tmp/bar/qaz/findMe

答案1

我會為兩個樹產生一個md5sum 清單(一列表示總和,一列表示檔案名稱),並將結果透過管道傳輸到一個腳本(例如awk 或perl)中,該腳本可以使用總和作為檔案名稱的雜湊值,並使腳本報告具有相同雜湊值的檔案名稱。

這不僅是一句簡單的話,而且是經常被問到、經常被解決的問題(按內容搜尋重複文件的結果超過一百萬次)。

您可能會發現這很有幫助:

相關內容