Bash

在管道到 openssh 之前對 find 的輸出進行排序

  • November 25, 2012

我正在使用此命令為目錄層次結構中的每個文件遞歸生成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”將其限制為每次執行一行。

引用自:https://unix.stackexchange.com/questions/56631