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

Tac*_*tex 3 command-line shell bash find files

我正在使用此命令为目录层次结构中的每个文件递归生成SHA-512 哈希

find . -type f -exec openssl sha512 {} \;
Run Code Online (Sandbox Code Playgroud)

我想在生成哈希之前按字典顺序对文件进行排序。

我可以这样使用sort

find . -type f | sort
Run Code Online (Sandbox Code Playgroud)

但我不确定如何将排序后的文件列表通过管道传输到openssl. 我试过这个:

find . -type f | sort | openssl sha512
Run Code Online (Sandbox Code Playgroud)

但这会生成 的整个输出的单个散列sort,而我想要每个单独文件的散列。

find在某些版本的 bash 中包含一个-s选项(“导致find按字典顺序遍历文件层次结构”),但这在我的find.

非常感谢您的帮助!

Arc*_*ege 6

你可以用它xargs来得到你想要的。

find . -type f -print0 | sort -z | xargs -0 -n1 openssl sha512
Run Code Online (Sandbox Code Playgroud)

-n1选项告诉 xargs 只允许向openssl命令提供一个参数。的-print0-z-0选项防止断裂管道是否有文件名中的“问题”的字符(如嵌入式换行符)。