web-dev-qa-db-ja.com

tarを使用して特定のフォルダーを別のフォルダーに抽出できますか?

私はLinuxの世界に不慣れで、障害にぶつかったようです。 tar xvfz archivename.tar.gz sampledir/コマンドを使用して特定のアーカイブを抽出できることはわかっていますが、アーカイブが含まれているパスではなくsampledir/testdir/に抽出するにはどうすればよいですか。たとえば、アーカイブはパス/tmp/archivename.tar.gzにあり、sampledirを抽出したいパス/tmp/testdirにあるtestdirに。

14
PeanutsMonkey

あなたが探しているのは-Cオプション:

$ man tar
<snip>

-C, --directory DIR
       change to directory DIR

あなたの例による使用法:

$ tar xvzf archivename.tar.gz -C /tmp/testdir/ sampledir/

また、tarの最新バージョンでは、gzip圧縮されたファイルを解凍するためにzフラグを必要としないことにも興味があるかもしれません。彼らはそれが.gzおよび正しいことを自動的に行います。

19
Handyman5

すべてを解凍してクレイジーなゲームをプレイする必要はありません。次の(簡単な)例に示すように、Tarはアーカイブ内のファイルのサブセットの抽出のみを完全にサポートしています。

/tmp $ mkdir tarsrc
/tmp $ cd tarsrc
/tmp/tarsrc $ mkdir a b
/tmp/tarsrc $ touch a/aaa b/bbb
/tmp/tarsrc $ tar cf ../tartest.tar .
/tmp/tarsrc $ cd ..
/tmp $ mkdir tardest
/tmp $ cd tardest
/tmp/tardest $ tar xf ../tartest.tar ./a    
/tmp/tardest $ ls -R
.:
a/

./a:
aaa

コツは、pathspecがtarfileの内容と正確に一致する必要があることです。したがって、tar tfを実行するときに、パスが./で始まる場合はそれを挿入する必要があり、それがない場合は省略しなければなりません。また、sub-sub-sub-sub-sub-sub-sub-pathを抽出する場合は、完了時にファイルシステムのNレベルの深さになります。

3
womble