tar アーカイブに保存されるファイル名の制御

tar アーカイブに保存されるファイル名の制御

ファイルシステム全体に散在するさまざまなファイルを含むtarアーカイブを作成したいと思います。

$ tar czvf outfile.tar.gz /some/file /some/other/filename

これによりアーカイブが正常に作成されますが、解凍した場合、ファイルは元の場所と一致するディレクトリツリーに残ります。

$ tar xvf outfile.tar.gz
some/file
some/other/filename

私は両方とも現在のディレクトリに抽出して自分で作成できるようにしたいfileです。filename

を使用して抽出中にこれを行うことができます--transform。たとえば、次のようになります。

$ tar xvf outfile.tar.gz --transform=s,.*/,,

これは私の要件を満たしていますが、抽出するときにあいまいなオプションを使用する必要があるのが少し迷惑になり、他の人に送信するのが難しくなるなどの問題があります。

作成時に次のことができます。

$ cd tmpdir
$ cp /some/file /some/other/filename .
$ tar czvf outfile.tar.gz *

しかし、これは特にファイルが大きい場合や多い場合は少し重いようです。

tar作成時に保存されたファイル名を直接制御する方法はありますか?

答え1

--transformでは、アーカイブの作成時に動作しませんか?私のGNU tar 1.27.1で動作するようです。

$ tar czf out.tar.gz some/foo some/other/bar --transform=s,.*/,,
$ tar tzf out.tar.gz 
foo
bar

それがうまくいかない場合は、もう1つの可能性は現在のディレクトリにあるファイルに接続することです(で行ったのと同じですが、cp使用しますln)。

$ ln /some/foo /some/other/bar .
$ tar czf out.tar.gz foo bar

答え2

という非常に便利なツールがあります。チチファイルを編集するために使用できますtar

tardy -Remove_Prefix 55 outfile.tar.gz transformed.tar.gz

これは55、内のすべてのディレクトリの最大深度より大きい任意の数ですoutfile.tar.gz。ファイル名から最大55個の先行ディレクトリを削除する-Remove_Prefix 55ように指示します。tardy

関連情報