我正在使用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以外的某些工具/实用程序的解决方案也是受欢迎的,只要它符合我的目的。在没有前瞻的情况下,我觉得grep的正则表达式解决方案会很复杂。例如。只需匹配除ABC
-
^([^A]|A([^B]|B([^C]|$)|$)|$).*$
答案 0 :(得分:1)
为什么不将find
与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