tarに別の「トップレベル」名を指定するにはどうすればよいですか?


10

ルート(/)をtarし、tarアーカイブで/ abcとして表示させたい。

カスタムトップレベル名を指定するためのtarフラグはありますか?

回答:


6

私が見つけることができる最も近いものは--transformオプションです。はっきりとはわかりませんが、これはGNUのみのフラグだと思います。

 --transform, --xform EXPRESSION
       use sed replace EXPRESSION to transform file names

あなたが渡すことができる、という使い方sed置換コマンドをし、変更/します/abc

tar cf root.tgz --transform 's/^\//\/abc/' /

これは/、アーカイブの作成時にパスを出力しますが、/abc解凍するとパスになります。


別の方法としてtar--transformオプションがない場合は/abc、シンボリックリンクをポイントして/tarを実行します。

$ ln -s / /abc
$ tar chf root.tgz /abc

リンクをたどる-hように指示tarしているので、これは不可欠です:

 -h, --dereference
       follow symlinks; archive and dump the files they point to

これは/abc、最上位ディレクトリとして設定する効果があります。


2

GNU tarを使用すると、次のコマンドを使用できます。

tar --transform="s|/|/abc/|" -Pcf bar.tar /

それ以外の場合、これは移植可能な方法です。つまり、GNUやその他の特定のtar拡張に依存せず、Unix準拠のマシンで利用できるPOSIXツールに基づいています。

pax -w -s '/\//\/abc\//' -f foo.tar /

1

ここでは、(/だけでなく)任意の場所からtarを実行する方法を示します。

tar --transform 's|^|/abc/|' -zcvf /path/to/dest.tgz *

/abc/すべてのパスの先頭に単にa を追加します。


1
この方法で作成されたアーカイブを抽出すると、警告が表示されtar: Removing leading / from member namesます。使用すると's|^|abc/|'うまくいきました。
Michael Platings
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.