
我試著透過內容的校驗和來找出哪些檔案不存在。我有兩個目錄/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)中,該腳本可以使用總和作為檔案名稱的雜湊值,並使腳本報告具有相同雜湊值的檔案名稱。
這不僅是一句簡單的話,而且是經常被問到、經常被解決的問題(按內容搜尋重複文件的結果超過一百萬次)。
您可能會發現這很有幫助: