web-dev-qa-db-ja.com

opensshにパイプする前にfindの出力をソートします

このコマンドを使用して、ディレクトリ階層内の各ファイルに対して 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では使用できません。

よろしくお願いします!

3
TachyonVortex

xargsを使用して、必要なものを取得できます。

find . -type f -print0 | sort -z | xargs -0 -n1 openssl sha512

-n1オプションは、opensslコマンドに1つの引数のみを指定できるようにxargsに指示します。 -print0-zおよび-0オプションは、ファイル名に「問題のある」文字(埋め込まれた改行など)がある場合にパイプラインが壊れるのを防ぎます。

5
Arcege

次のように、xargs -L 1 opensslsha512にパイプします。

find . -type f | sort | xargs -L 1 openssl sha512

xargsは出力を受け取り、それをプログラムのコマンドラインとして実行します。「-L1」は実行ごとに1行に制限します。

1
Didi Kohen