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


Я новичок в мире Linux и, похоже, столкнулся с камнем преткновения. Я знаю, что могу извлечь специальный архив, используя команду tar xvfz archivename.tar.gz sampledir/ однако как я могу извлечь sampledir/ в testdir/ а не путь, в котором находится архив, например, архив находится в пути /tmp/archivename.tar.gz и я хотел бы извлечь sampledir в testdir который находится на пути /tmp/testdir,


14
2017-07-12 22:34


Источник




Ответы:


То, что вы ищете, это -C опция:

$ man tar
<snip>

-C, --directory DIR
       change to directory DIR

Использование в вашем примере:

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

Кроме того, вам может быть интересно узнать, что современные версии tar не требуют z флаг для распаковки gzipped-файлов; они заметят, что это .gz и «Делать правильную вещь» автоматически.


19
2017-07-12 23:46



Благодарю. Смешно, я попытался это, прежде чем публиковать вопрос, и это не удалось. Возможно, я пропустил вариант. Я попробую еще раз. - PeanutsMonkey
Brilliance. Я всегда забываю об этом для больших архивов. - zmonteca


Вам не нужно играть в сумасшедшие игры с разворачиванием всего. 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, если путь начинается с ./, вам нужно вставить это, и если у него его нет, вы должны его оставить. Кроме того, если вы хотите извлечь суб-суб-суб-суб-под-под-под-путь, он закончит N уровней глубоко в файловой системе, когда вы закончите.


3
2017-07-12 23:10



Спасибо, черт. Может быть, это не правильный пример, но я сравниваю tar с Winzip, WinRAR и т. Д., И, возможно, tar - это некорректная команда для использования, но, видя, что я видел пример tar-архивов gzip и bzip, я надеялся, что смогу применять аналогичный процесс, например выберите файл, который вы хотите разблокировать (tar делает это), и выберите путь, который вы хотите извлечь (tar не делает этого, если я не в конкретном каталоге). - PeanutsMonkey
Вы хотите, чтобы -C вариант tar. - womble♦