我正在使用这个命令递归地生成一个SHA-512 哈希对于目录层次结构中的每个文件:
find . -type f -exec openssl sha512 {} \;
我想在生成哈希值之前按字典顺序对文件进行排序。
我可以sort
这样使用:
find . -type f | sort
但我不确定如何将排序后的文件列表通过管道传输到openssl
.我试过这个:
find . -type f | sort | openssl sha512
但这会生成 的整个输出的单个哈希sort
,而我想要每个单独文件的哈希。
find
在某些版本的 bash 中包含一个-s
选项(“导致find
按字典顺序遍历文件层次结构”),但这在我的find
.
非常感谢您的帮助!
答案1
您可以使用它xargs
来获得您想要的东西。
find . -type f -print0 | sort -z | xargs -0 -n1 openssl sha512
该-n1
选项告诉 xargs 只允许为该命令提供一个参数openssl
。如果文件名中存在“问题”字符(如嵌入的换行符),-print0
、-z
和选项可防止管道中断。-0
答案2
将其通过管道传输到 xargs -L 1 openssl sha512,如下所示:
find . -type f | sort | xargs -L 1 openssl sha512
xargs 获取输出并将其作为程序的命令行运行,“-L 1”将其限制为每次执行一行。