有没有办法对子文件夹中的所有文件进行md5sum?

问题描述

我有几种导出电报数据的方法,我想计算所有文件的md5和sha256哈希值,但只计算根目录中的文件

$ md5sum `ls` > hash.md5

md5sum: chats: Is a directory
md5sum: css: Is a directory
md5sum: images: Is a directory
md5sum: js: Is a directory
md5sum: lists: Is a directory
md5sum: profile_pictures: Is a directory

这在输出文件

7e315ce28aa2f6474e69a7b7da2b5886  export_results.html
66281ec07a2c942f50938f93b47ad404  hash.md5
da5e2fde21c3e7bbbdb08a4686c3d936  ID.txt

有没有办法得到这样的东西?

5750125fe13943f6b265505b25828400  js/script.js

对不起,我的英语

解决方法

使用bash:

shopt -s globstar
md5sum ** >/tmp/hash.md5

忽略此类错误:md5sum: foobar: Is a directory

来自man bash

globstar:如果设置,则在路径名扩展上下文中使用的模式**将匹配所有文件以及零个或多个目录和子目录。如果模式后跟/,则仅目录和子目录匹配。

,

hashdeep是一个有帮助的工具,但默认情况下可能未安装。 hashdeep直接执行此操作,并具有更多优势,例如二进制文件也可用于Windows。

将使用hashdeep通过以下命令回答您的问题:

hashdeep -c md5,sha256 -r -o f -l . > hash.md5

这将使用一个命令来计算所有子目录中所有文件的md5和sha256。

由于文件的缓存效果,一起创建md5和sha256可能会更快。此外,该命令还具有使用多个线程的选项,可以使用多核CPU和快速磁盘来加快任务执行速度。

,

或者,您可以将find-exec选项一起使用:

find topdir -type f -exec md5sum {} + > MD5SUMS

topdir替换为实际的目录名称,如果要在当前目录(及其子目录,如果有)上工作,则将其删除。这将仅计算常规文件的校验和(因此,不会出现“ md5sum:某事:是目录”错误),并且不会因“ 参数列表太长而受苦” >”问题。