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

How to exclude some files and directories from the output of md5deep?

我正在使用 md5deep 实用程序计算文件的哈希值,同时递归地挖掘目录结构。

它允许 运行 这样的命令 -

md5deep -r -l -j0 app

并给出这样的输出(所有底层 files/directories 的 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 选项)来提供一个文件中的文件列表names/directories,但是那些文件将被包括在内。但是,我正在寻找相反的方法,即从给定目录中的动态目录集中排除一些预定义的 files/directories 集(将来可以添加新的 directories/files)。

也欢迎使用正则表达式或一些 tool/utility 除了 md5deep 之外的解决方案,只要它符合我的目的。我觉得在没有前瞻的情况下,使用 grep 的正则表达式解决方案会很复杂。例如。需要以下正则表达式来匹配除 ABC -

之外的任何字符串
^([^A]|A([^B]|B([^C]|$)|$)|$).*$

为什么不将 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