肯定有办法轻松做到这一点!

我try 过Linux命令行应用程序,比如sha1summd5sum,但它们似乎只能计算单个文件的哈希值,并输出一个哈希值列表,每个文件一个.

我需要为文件夹的全部内容(不仅仅是文件名)生成一个散列.

我想做点像

sha1sum /folder/of/stuff > singlehashvalue

Edit:澄清一下,我的文件在目录树中处于多个级别,它们不都位于同一根文件夹中.

推荐答案

一种可能的方法是:

sha1sum path/to/folder/* | sha1sum

如果有一个完整的目录树,那么最好使用find和xargs.一个可能的命令是

find path/to/folder -type f -print0 | sort -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量加倍,第一个查找所有文件名并对内容进行校验和,第二个查找所有文件名和目录名,打印名称和模式.然后,对"文件名和校验和"列表以及"名称和目录,具有权限"列表进行校验和,以获得较小的校验和.

Linux相关问答推荐

GNC C:关于主要出发点混乱的 idea ?

Aarch64在Linux上是否有红色区域,如果有,是16个字节还是128个字节?

列出Linux上特定目录和子目录名称的bash命令

在Linux中随机化txt文件但保证不重复行

BASH:在curl输出的每一行添加前缀

awk 使用动态列号

如何从 2 个文件中获取内容并使用 shell 脚本将该内容附加到新文件中

如何在 Linux 中获取 C/C++ 中的用户名?

Linux time 命令输出中 real、user 和 sys 的含义

在 Bash 中从最后到第一个输出文件行

用于 Linux 的 Less 编译器

polkitd未注册身份验证代理的解释

列出当前目录和所有子目录中特定大小的文件

发出信号并中断比较

GNU Octave 方法对矩阵中的每个项目进行操作.octave arrayfun(...)示例

ldconfig 错误:使用 Linux 加载程序时不是符号链接

如何从目录复制内容而不是符号链接?

仅当文件存在于 shell 脚本中时才移动

Linux(Ubuntu)终端-如何查看以前的页面不再可见

具有所有内核的 Gzip