Я новичок в мире Linux и, кажется, наткнулся на камень преткновения. Я знаю, что могу извлечь специальный архив с помощью команды tar xvfz archivename.tar.gz sampledir/
однако как я могу извлечь sampledir/
к testdir/
а не путь, по которому находится архив, например, в настоящее время архив находится в пути /tmp/archivename.tar.gz
и я хотел бы извлечь sampledir
к testdir
который находится на пути /tmp/testdir
.
Вы ищете -C
вариант:
$ man tar
<snip>
-C, --directory DIR
change to directory DIR
Использование в вашем примере:
$ tar xvzf archivename.tar.gz -C /tmp/testdir/ sampledir/
Также вам может быть интересно узнать, что современные версии tar
не требуют z
флаг для распаковки gzip-файлов; они заметят, что это .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
Хитрость в том, что путь должен точно соответствовать содержимому tar-файла. Итак, когда вы делаете tar tf
, если путь начинается с ./
, вы должны вставить это, а если у него его нет, вы должны оставить его. Кроме того, если вы хотите извлечь подподподподподподподподпуть, когда вы закончите, он окажется в глубине файловой системы на N уровней.