私はLinuxの世界に不慣れで、障害にぶつかったようです。 tar xvfz archivename.tar.gz sampledir/
コマンドを使用して特定のアーカイブを抽出できることはわかっていますが、アーカイブが含まれているパスではなくsampledir/
をtestdir/
に抽出するにはどうすればよいですか。たとえば、アーカイブはパス/tmp/archivename.tar.gz
にあり、sampledir
を抽出したいパス/tmp/testdir
にあるtestdir
に。
あなたが探しているのは-C
オプション:
$ man tar
<snip>
-C, --directory DIR
change to directory DIR
あなたの例による使用法:
$ tar xvzf archivename.tar.gz -C /tmp/testdir/ sampledir/
また、tar
の最新バージョンでは、gzip圧縮されたファイルを解凍するためにz
フラグを必要としないことにも興味があるかもしれません。彼らはそれが.gz
および正しいことを自動的に行います。
すべてを解凍してクレイジーなゲームをプレイする必要はありません。次の(簡単な)例に示すように、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レベルの深さになります。