自動化が完了したら、いくつかのログファイルをパッケージ化して分析する必要がある場合に備えて、どこかに保存したいと思います。ログファイルはホスト上のさまざまな場所にあり、その一部は非常に大きくなる可能性があります。
次のファイルが存在し、そのファイルがすべて欲しいとします。
/app/app_stderr.log
/app/app_stdout.log
/var/log/service/service.log
/var/lib/service/service_backend.log
/var/log/messages.log
しかし、tarファイルへのパスは望ましくありません。次の5つのファイルのみが必要です。
app_stderr.log
app_stdout.log
service.log
service_backend.log
messages.log
私もgzipで圧縮されたtarアーカイブが欲しいです。理想的には、可能な限り効率的な方法でこれを行いたいと思います。つまり、gzip圧縮の前にログファイルをコピーしたり、圧縮されていないtarファイルを一時的に保存したりする必要はありません。
同様の質問に対する解決策として-C
一般的に提供されるオプションは私には適していません。多くの種類パス名の削除中にファイルシステムの他の部分にあるディレクトリ。
ただ実行すると:
tar -czf /drop/run_logs.tar.gz /app/app_*.log /var/log/service/*.log /var/lib/service/*.log /var/log/messages.log
次に、パスを含むtarファイルをインポートします。
ストリッピングパスを完了できますか?
ベストアンサー1
tar--transform
オプションを使用すると、tarファイルを書き込む前にファイル名を変更できます。このオプションは、sed
tarファイルに書き込む前に式を介してファイル名を実行します。バラよりここ詳細を確認してください。
これは簡単な例です。
まず、いくつかのファイルを作成し、tarファイルに追加します。
$ mkdir test-tar
$ cd test-tar
$ mkdir -p alpha/beta/gamma
$ touch alpha/one.log
$ touch alpha/beta/two.log
$ touch alpha/beta/gamma/three.log
tar
フル相対パスでtarファイルを再生するには、標準を使用します。
$ tar cf test.tar alpha/*.log alpha/beta/*.log alpha/beta/gamma/*.log
$ tar tf test.tar
alpha/one.log
alpha/beta/two.log
alpha/beta/gamma/three.log
これでコマンドを再実行しますが、この--transform
オプションを使用します。この例では、sed式を使用して、s#.*/##
ファイル名から右端の文字までのすべての先行文字を削除します/
。
$ tar cf test-transform.tar alpha/*.log alpha/beta/*.log alpha/beta/gamma/*.log --transform='s#.*/##'
tarファイルに記録されている内容を確認してください。
$ tar tf test-transform.tar
one.log
two.log
three.log
起動パスがありません。