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

14

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

PeanutsMonkey
источник

Ответы:

19

То, что вы ищете, это -Cвариант:

$ man tar
<snip>

-C, --directory DIR
       change to directory DIR

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

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

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

Handyman5
источник
Благодарю. Как ни странно, я попытался сделать это до того, как опубликовал вопрос, и он не удался. Может быть, я пропустил вариант. Я попробую это снова.
PeanutsMonkey
Brilliance. Я всегда забываю об этом для больших архивов.
Zmonteca
3

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

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