一尘不染

Linux:为给定的文件夹和内容计算单个哈希?

linux

当然,必须有一种方法可以轻松地做到这一点!

我已经尝试了Linux命令行应用程序,例如sha1sum和,md5sum但是它们似乎只能计算单个文件的哈希值并输出哈希值列表,每个文件一个哈希值。

我需要为文件夹的整个内容生成一个哈希(不仅仅是文件名)。

我想做类似的事情

sha1sum /folder/of/stuff > singlehashvalue

编辑: 澄清一下,我的文件位于目录树中的多个级别,它们并不都位于同一根文件夹中。


阅读 1040

收藏
2020-06-07

共1个答案

一尘不染

一种可能的方式是:

sha1sum路径/到/文件夹/ * | sha1sum

如果有整个目录树,则最好使用find和xargs。一种可能的命令是

查找路径/到/文件夹-type f -print0 | 排序-z | xargs -0 sha1sum | sha1sum

最后,如果您还需要考虑权限和空目录:

(find path/to/folder -type f -print0  | sort -z | xargs -0 sha1sum;
 find path/to/folder \( -type f -o -type d \) -print0 | sort -z | \
   xargs -0 stat -c '%n %a') \
| sha1sum

的参数stat将导致它打印文件名,然后是其八进制权限。这两个查找将一个接一个地运行,从而导致磁盘IO数量翻倍,第一个查找所有文件名并校验和内容,第二个查找所有文件和目录名,打印名称和方式。然后,将对“文件名和校验和”列表以及“具有权限的名称和目录”列表进行校验和,以得到较小的校验和。

2020-06-07