パス名を含まずに複数のパスのファイルを圧縮するには?

パス名を含まずに複数のパスのファイルを圧縮するには?

自動化が完了したら、いくつかのログファイルをパッケージ化して分析する必要がある場合に備えて、どこかに保存したいと思います。ログファイルはホスト上のさまざまな場所にあり、その一部は非常に大きくなる可能性があります。

次のファイルが存在し、そのファイルがすべて欲しいとします。

/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ファイルを書き込む前にファイル名を変更できます。このオプションは、sedtarファイルに書き込む前に式を介してファイル名を実行します。バラよりここ詳細を確認してください。

これは簡単な例です。

まず、いくつかのファイルを作成し、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

起動パスがありません。

おすすめ記事