2012-03-15 12 views
22

私はディレクトリがあります。私は頻繁に次のコマンドを使用して圧縮/var/tmp/my-dir/ディレクトリ名をtarに変更する前に

$ cd /var/tmp/ 
$ tar -zcf my-dir.tar.gz my-dir/* 

その後、私は私の-dir.tar.gzをuntarするとき、それは現在のディレクトリにmy-dir/を作成します。 my-dirディレクトリがtarballの中に "ラップされている"ようです。 の名前を変更するためのタールオプションがありますか?実際ターリングが起こる前your-dir。だから...

$ tar -zxf my-dir.tar.gz 
# So that ... this creates your-dir/, instead of my-dir/ 

ありがとう。

答えて

41

どのtar

GNU Tarは、ファイル名を操作するsed式を指定した--transform引数を受け入れます。例えば

は、開梱時に名前を変更します

tar -zxf my-dir.tar.gz --transform s/my-dir/your-dir/ 

BSDタ​​ールとSタールも同様-s引数を持って、簡単な/old/new/(ではない一般的なsed式)を服用します。

+0

うわー、どうもありがとうございました!これは魅力(受け入れられた、+1)のように機能します。 – moey

+1

@ephemient、私は--transform = 'pattern'を次のように使用しなければならなかった: sudo tar -xjvf thunderbird-14.0.tar.bz2 --transform = 's/thunderbird \(\/\)/ thunderbird.14 \ 1/'とln -sf thunderbird.14 thunderbirdのアップデートthunderbirdは問題にはなりません! \ m/ –

+1

'--transform'は1.2で導入されましたが残念ながらRHELとCentOS 5.10にはtar v1.15しか付属していません:( –

0

Macの場合-sフラグ。圧縮上

名前の変更:エキスの

tar -zcf my-dir.tar.gz -s /^my-dir/your-dir/ my-dir/*

名前の変更:

tar -zxf my-dir.tar.gz -s /^my-dir/your-dir/

関連する問題