我正在使用md5deep實用程序在遞歸挖掘目錄結構時計算文件的散列值。如何從md5deep的輸出中排除一些文件和目錄?
它允許運行這樣的命令 -
md5deep -r -l -j0 app
並給出了這樣的輸出(所有底層的文件/目錄的MD5哈希遞歸名單,考慮到他們的內容) -
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/controllers/empty
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/models/empty
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/components/empty
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/helpers/empty
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/behaviors/empty
d41d8cd98f00b204e9800998ecf8427e app/tests/groups/empty
d41d8cd98f00b204e9800998ecf8427e app/tests/fixtures/empty
我進一步對結果進行md5sum
以產生整個代碼庫的散列 -
md5deep -r -l -j0 app | md5sum
輸出 -
86df91fc29f2891ff0aa7aaa4bd13730 -
現在,我被困在距離而計算最終的md5sum被考慮排除一些路徑(文件和目錄)。例如。如果我想排除這兩條路徑 - app/tests/groups/empty
和app/tests/fixtures/empty
。
md5deep documentation提供了一個選項(-f
選項)來提供文件中的文件名/目錄列表,但這些文件將包含在內。但是,我正在尋找相反的方法,即從給定目錄內的動態目錄集(將來可能添加的新目錄/文件)中排除一些預定義的文件/目錄。
使用正則表達式或除md5deep以外的其他工具/實用程序的解決方案也是受歡迎的,只要它符合我的目的。如果沒有lookahead,我覺得使用grep的正則表達式會很複雜。例如。只是需要用下面的正則表達式來排除ABC
任意字符串匹配 - 爲什麼不使用find
^([^A]|A([^B]|B([^C]|$)|$)|$).*$
https://stackoverflow.com/a/1395247/351903
看起來不錯。我只有一個問題。是否有可能以不同的順序返回個別md5sums?因爲這可能會導致不同的結果,當我管道上述輸出獲得像這樣的最終散列 - 「find app -type f! -path「* models *」-exec md5sum {} \;'。僅供參考,命令'md5deep -r -l -j0 app |中的'-j0' md5sum'代表使用1個線程來防止因個別md5sums以不同順序返回而導致的不確定性。 –
看來,如果'find'使用多線程,會出現上述問題。 –
@SandeepanNath'find'將在遍歷整個目錄樹時順序執行'md5sum'命令。在我發佈的命令中沒有涉及多線程 – oliv