在管道传输到 openssh 之前对 find 的输出进行排序

在管道传输到 openssh 之前对 find 的输出进行排序

我正在使用这个命令递归地生成一个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”将其限制为每次执行一行。

相关内容