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.
非常感谢您的帮助!
你可以用它xargs来得到你想要的。
find . -type f -print0 | sort -z | xargs -0 -n1 openssl sha512
Run Code Online (Sandbox Code Playgroud)
该-n1选项告诉 xargs 只允许向openssl命令提供一个参数。的-print0,-z和-0选项防止断裂管道是否有文件名中的“问题”的字符(如嵌入式换行符)。