ファイルシステム全体に散在するさまざまなファイルを含む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