如何从md5deep的输出中排除某些文件和目录?

时间:2016-10-25 12:55:15

标签: regex md5 md5sum

我正在使用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以外的某些工具/实用程序的解决方案也是受欢迎的,只要它符合我的目的。在没有前瞻的情况下,我觉得grep的正则表达式解决方案会很复杂。例如。只需匹配除ABC -

之外的任何字符串,需要以下正则表达式
^([^A]|A([^B]|B([^C]|$)|$)|$).*$

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

1 个答案:

答案 0 :(得分:1)

为什么不将findmd5sum一起使用:

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