Назад | Перейти на главную страницу

Могу ли я извлечь определенную папку с помощью tar в другую папку?

Я новичок в мире 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 уровней.