出力をリダイレクトするtar.gzファイルを生成するために、Solarisは次のコマンドを使用しています。
cd /ebs/datatop && tar cvf - * | gzip -c > /ebs/backup/proddata.tar.gz >> /dev/null 2>> error.log
実行すると、空の/ebs/backup/proddata.tar.gz
ファイルが生成されます。どのエラーも発生しません。 tarファイルがにリダイレクトされているとします。コマンド出力がerror.logにリダイレクトされ、エラーがerror.logに書き込まれることを/dev/null
望みます。/dev/null
答え1
出力はtar cvf -
アーカイブです。-
引数をとして指定すると、出力アーカイブがstdoutになるように指示するf
ことになりますtar
(この場合は|gzip
stdoutがへtar
のパイプであるためgzip
)。
v
要求された詳細出力(ファイルリスト)は、v
エラーメッセージのようにstderrに表示されます。なぜなら、gzip
stdoutにfileに入るのと同じ方法で現れないからですtar.gz
。また、唯一の2> error.log
リダイレクトがあることに注意してください。gzip
stderr
詳細なファイルリストが必要ない場合(私の考えでは出力)、v
およびに関するstderr
すべてのエラーメッセージ(およびシェルで開かれた出力ファイル)をログファイルに移動するには、サブシェルまたはコマンドグループをリダイレクトします。cd
tar
gzip
(cd /ebs/datatop &&
tar cf - . | gzip > /ebs/backup/proddata.tar.gz) 2>> error.log
また、現在のディレクトリをアーカイブ*
に置き換えました。隠しファイルではなくファイルにのみ拡張され、一部のファイル名に問題が発生します。.
*
error.log
古いファイルは現在の作業ディレクトリに保存されますcd
。あなたのアプローチに応じて、これは最終的にファイルerror.log
に保存されます。tar.gz
v
そのファイルのリスト(または使用)を特定のファイルにリダイレクトし、エラーを別のファイルにリダイレクトするには、vv
flags以外の-
引数を使用する必要がありますf
。たとえば、次をサポートするシステムではこの構文を使用します/dev/fd/n
。
(tar cvvf /dev/fd/3 . 3>&1 > ../file.list | gzip > ../file.tar.gz) 2> ../error.log
上記では、/dev/fd/3
パイプはまだ参照されていますがgzip
(3>&1
stdoutをパイプにリダイレクトする前にすでにファイル記述子3をパイプにリダイレクトしているため)、stdoutにアーカイブを送信するように指示しないため、書き込み../file.list
ファイルを自由にリストできます。標準出力に(にリダイレクト)tar
tar
../file.list