Bash
在管道到 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
.非常感謝您的幫助!
你可以用
xargs
得到你想要的。find . -type f -print0 | sort -z | xargs -0 -n1 openssl sha512
該
-n1
選項告訴 xargs 只允許將一個參數提供給openssl
命令。如果文件名中有“問題”字元(如嵌入的換行符),則 和 選項可防止管道-print0
中斷-z
。-0
將其通過管道傳輸到 xargs -L 1 openssl sha512,如下所示:
find . -type f | sort | xargs -L 1 openssl sha512
xargs 獲取輸出並將其作為程序的命令行執行,“-L 1”將其限制為每次執行一行。