tar-抽出時に先頭のディレクトリコンポーネントを削除します


104

完全なディレクトリツリーではなく、ターゲットディレクトリのみを抽出するにはどうすればよいですか?

圧縮する

tar cf /var/www/site.tar /var/www_bak/site

エキス

tar xf /var/www/site.tar -C /tmp

これにより、以下が生成されます。

/tmp/var/www/site

ファイルが抽出されるときにディレクトリツリー全体が作成されるのをどのように回避できますか?

抽出するもの:

/tmp/site

回答:


34

-C作成時にオプションを使用しない理由:

$ tar cf /var/www/site.tar -C /var/www_bak/ site

1
TMTOWTDI。同じ-Cオプションを使用して、それも動作します;)
MikeyB

12
彼は、出力ディレクトリを変更するのではなく、いくつかの主要なコンポーネントからパスを削除したいと考えています。正解については、以下を参照してください。
aymericbeaumet

4
他の誰かがアーカイブを準備しているときは使用できません。

なぜなら、 `` `_t = prefix-$(date +%Y%m%d); tar -cjf ".backups / $ _ t.tar.bz2" --transform = "s#^(\ ./)?#$ _ t /#x;" -ファイル...; tar -df ".backups / $ _ t.tar.bz2" --strip-components = 1 `` `
AnrDaemon

258

次の--strip-components=NUMBERオプションを使用しますtar

 --strip-components=NUMBER
       strip NUMBER leading components from file names on extraction

あなたのコマンドは次のようになります:

tar xfz /var/www/site.gz --strip-components=2 -C /tmp

19
tarを作成する前に考える必要がないため、この答えの方が優れています。作成済みのtarファイルで使用できます。ありがとう@MikeyB!
ファビアンクアトラヴォー14年

4
これがGNU tarとBSD tarの両方で機能することを報告できてうれしいです。
ネイサンオスマン

4
そして、あなたはtar作成者ではないかもしれません...(または別のツールでそれをやっていて、そのツールがばかげたことをするなら...)
xenoterracide

ただし、--strip-componentsbusybox-embeddedの実装を使用している場合は、まだフラグが欠落している可能性がありtarます。
シルヴァインウルグ

1
@FabienQuatravauxええ、はい---間違えて、抽出中に表示したくない主要なディレクトリを含むアーカイブを作成した場合。しかし、そもそも望ましくない主要なディレクトリなしでアーカイブを構築する方が明確です。
カラフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.