アーカイブチェック `gzip -v -t`はstderrで正常に印刷されます。それとも私が何か間違っているのでしょうか? [コピー]

アーカイブチェック `gzip -v -t`はstderrで正常に印刷されます。それとも私が何か間違っているのでしょうか? [コピー]

バックアップスクリプトにgzipファイルチェックを追加したいです。

私のバックアップスクリプトは、次のようにstdoutとstderrのログを生成します。

scp -i $BCKIDENTITYFILE $BCKLOG "$BCKREMOTEUSER"@"$BCKHOST":$BCKREMOTEDIR 2>> $BCKERRLOG 1>> $BCKLOG

私がこれをテストしたとき:

# this prints OK to error.log, nothing to output.log
gzip -v -t existingfile.sql.gz 2>> error.log 1>> output.log 

# prints missing file message to error.log, nothing to output.log
gzip -v -t notexistingfile.sql.gz 2>> error.log 1>> output.log 

私は何が間違っていましたか?

答え1

問題は、標準エラー2 >>(2 >>)および標準出力(1 >>)ストリームを別々のログファイルにリダイレクトしますが、gzipがステータス情報とエラーメッセージを標準エラーストリームに書き込んでいることです。

gzip -v -t Existingfile.sql.gz コマンドを実行するときに -v オプションを使用すると、gzip はファイル名、ソース、圧縮サイズ、圧縮率などの圧縮ファイルに関する追加情報を出力します。この情報は標準エラーストリームに書き込まれ、スクリプトの error.log ファイルにリダイレクトされます。

ファイルが存在しない場合は、「gzip:noteexistingfile.sql.gz:そのファイルまたはディレクトリはありません」というメッセージも標準エラーストリームに送信され、error.logにリダイレクトされます。

この問題を解決するには、標準エラーと標準出力ストリームを同じファイルにリダイレクトして、ステータス情報とエラーメッセージの両方をoutput.logファイルに書き込むことができます。

gzip -v -t 既存の file.sql.gz &>> output.log 標準エラーと標準出力を output.log ファイルにリダイレクトするため、gzip 確認結果を 1 つのファイルに表示できます。

または、次のように標準エラーを標準出力にリダイレクトし、標準出力をoutput.logファイルにリダイレクトすることもできます。

gzip -v -t 既存ファイル.sql.gz 2>

関連情報