このコマンドを使用して、ディレクトリ階層内の各ファイルに対して SHA-512 hash を再帰的に生成しています。
find . -type f -exec openssl sha512 {} \;
ハッシュを生成する前に、ファイルを辞書式順序で並べ替えたいと思います。
私は次のようにsort
を使用できます:
find . -type f | sort
しかし、ソートされたファイルリストをopenssl
にパイプする方法がわかりません。私はこれを試しました:
find . -type f | sort | openssl sha512
しかし、これはsort
の出力全体の単一のハッシュを生成しますが、個々のファイルごとにハッシュが必要です。
bashの一部のバージョンのfind
には-s
オプションが含まれています(「find
が辞書式順序でファイル階層をトラバースする原因」)が、これは私のバージョンのfind
では使用できません。
よろしくお願いします!
xargs
を使用して、必要なものを取得できます。
find . -type f -print0 | sort -z | xargs -0 -n1 openssl sha512
-n1
オプションは、openssl
コマンドに1つの引数のみを指定できるようにxargsに指示します。 -print0
、-z
および-0
オプションは、ファイル名に「問題のある」文字(埋め込まれた改行など)がある場合にパイプラインが壊れるのを防ぎます。
次のように、xargs -L 1 opensslsha512にパイプします。
find . -type f | sort | xargs -L 1 openssl sha512
xargsは出力を受け取り、それをプログラムのコマンドラインとして実行します。「-L1」は実行ごとに1行に制限します。