私はこれを見ようとしています:ディレクトリの内容のMD5の合計を合計として取得するには?だから私は次のことを試しています。
$ find | LC_ALL=C sort | cpio -o | md5sum
25324 blocks
6631718c8856606639a4c9b1ef24d420 -
うーん...出力に他のものではなくハッシュだけが欲しい...したがって、「25324チャンク」がstderrに印刷されたと仮定し、次にstderrをリダイレクトしようとしました/dev/null
。
$ find | LC_ALL=C sort | cpio -o | md5sum 2>/dev/null
25324 blocks
6631718c8856606639a4c9b1ef24d420 -
いいえ、そうではありません。テスト目的でstdoutを次にリダイレクトしてみましょう/dev/null
。
$ find | LC_ALL=C sort | cpio -o | md5sum 1>/dev/null
25324 blocks
いいですね。ハッシュは期待どおりに消えましたが、「チャンク」メッセージは残りますか? !ファイル記述子3で印刷された「25324ブロック」は正確にどこにありますか? ! :
$ find | LC_ALL=C sort | cpio -o | md5sum 3>/dev/null
25324 blocks
6631718c8856606639a4c9b1ef24d420 -
いいえ、そうではありません...とにかくawkを使用してハッシュを取得できます。
$ find | LC_ALL=C sort | cpio -o | md5sum | awk '{print $1}'
25324 blocks
6631718c8856606639a4c9b1ef24d420
ただし、クソ「チャンク」メッセージはまだ印刷されます。それでは、端末にどのように印刷しますか(stdoutやstderrを介して印刷されないようです)。そしてメッセージをどのように抑制しますか?
編集:答えが見つかりました。 「チャンク」メッセージがcpio
実際に印刷されるため、正しい操作は次のとおりです。
$ find | LC_ALL=C sort | cpio -o 2>/dev/null | md5sum | awk '{print $1}'
6631718c8856606639a4c9b1ef24d420
今ハッシュだけが残りました...
答え1
メッセージはによって印刷され、cpio
これを防ぎます。
find | LC_ALL=C sort | cpio -o 2> /dev/null | md5sum | awk '{print $1}'
cpio
この方法を使用すると、印刷されたエラーメッセージが失われます。一部のバージョンcpio
(少なくともGNUとFreeBSD)は、次のquiet
オプションをサポートしています。
find | LC_ALL=C sort | cpio -o --quiet | md5sum | awk '{print $1}'
cpio
サポートされていないバージョンエラーが見つからないようにするには、--quiet
そのエラーを一時ファイルに書き込むことができます。
cpiolog=$(mktemp); find | LC_ALL=C sort | cpio -o 2> "${cpiolog}" | md5sum | awk '{print $1}'; grep -v blocks "${cpiolog}"; rm -f "${cpiolog}"
答え2
このメッセージはで印刷されますcpio
。 GNU cpioまたはFreeBSD cpioを使用して、--quiet
これを抑制するオプションを渡します。
あるいは、cpioを捨てて、代わりに標準paxまたはより一般的なtarを使用してください。