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

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

助けてくれてありがとう!

答え1

xargsあなたが望むものを得るためにそれを使用することができます。

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

この-n1オプションは、xargsにコマンドに1つの引数のみを許可するように指示しますopenssl-print0およびオプションは、ファイル名に「問題」文字(挿入された改行文字など)が含まれていると-zパイプが壊れるのを防ぎます。-0

答え2

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

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

xargsは出力を取得し、プログラムのコマンドラインとして実行します。 「-L 1」は一度に1行に制限します。

関連情報