【问题标题】:How to exclude some files and directories from the output of md5deep?如何从 md5deep 的输出中排除一些文件和目录?
【发布时间】:2017-03-07 12:54:09
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: regex md5 md5sum


    【解决方案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

    【讨论】:

    • 看起来不错。我只有一个问题。是否有可能以不同的顺序返回单个 md5sum?因为当我通过管道传输上述输出以获得像这样的最终散列 - find app -type f ! -path "*models*" -exec md5sum {} \; 时,这可能会导致不同的结果。仅供参考,命令 md5deep -r -l -j0 app | md5sum 中的 -j0 代表使用 1 个线程来防止由于单个 md5sum 以不同顺序返回而导致的不确定性。
    • 看来,如果find使用多线程,就会出现上述问题。
    • @SandeepanNath find 将在遍历整个目录树时顺序执行md5sum 命令。我发布的命令中没有涉及多线程
    • 只是为了记录,纠正自己,在我的第一条评论中,我的意思是find app -type f ! -path "*models*" -exec md5sum {} \; | md5sum 得到最终的哈希值。
    • @SandeepanNath 只需在命令中添加任意数量的! -path "app/<dir>*"
    猜你喜欢
    • 1970-01-01
    • 2020-02-06
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多