问题描述
我有几种导出电报数据的方法,我想计算所有文件的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:某事:是目录”错误),并且不会因“ 参数列表太长而受苦” >”问题。