2016-10-25 45 views
0

我正在使用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/emptyapp/tests/fixtures/empty

md5deep documentation提供了一個選項(-f選項)來提供文件中的文件名/目錄列表,但這些文件將包含在內。但是,我正在尋找相反的方法,即從給定目錄內的動態目錄集(將來可能添加的新目錄/文件)中排除一些預定義的文件/目錄。

使用正則表達式或除md5deep以外的其他工具/實用程序的解決方案也是受歡迎的,只要它符合我的目的。如果沒有lookahead,我覺得使用grep的正則表達式會很複雜。例如。只是需要用下面的正則表達式來排除ABC任意字符串匹配 - 爲什麼不使用find

^([^A]|A([^B]|B([^C]|$)|$)|$).*$ 

https://stackoverflow.com/a/1395247/351903

回答

1

md5sum在一起:

find app -type f -exec md5sum {} \; 
d41d8cd98f00b204e9800998ecf8427e app/tests/groups/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/components/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/behaviors/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/models/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/helpers/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/controllers/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/fixtures/empty 

如果您需要排除一些目錄,使用選項-path,如果您需要排除文件名使用-name

例如,如果要排除文件,該文件將包含models在他們的路徑,使用以下命令:

find app -type f ! -path "*models*" -exec md5sum {} \; 

順便說一句,如果你看空的文件,你可以使用-empty選項: find app -empty

+0

看起來不錯。我只有一個問題。是否有可能以不同的順序返回個別md5sums?因爲這可能會導致不同的結果,當我管道上述輸出獲得像這樣的最終散列 - 「find app -type f! -path「* models *」-exec md5sum {} \;'。僅供參考,命令'md5deep -r -l -j0 app |中的'-j0' md5sum'代表使用1個線程來防止因個別md5sums以不同順序返回而導致的不確定性。 –

+0

看來,如果'find'使用多線程,會出現上述問題。 –

+0

@SandeepanNath'find'將在遍歷整個目錄樹時順序執行'md5sum'命令。在我發佈的命令中沒有涉及多線程 – oliv

相關問題