Как извлечь файлы в другой каталог с помощью команды «tar»?

510

Я думал, что tar archive.tar /users/mylocation будет работать, но это не так. Как я могу это сделать?     

задан goovim 26.05.2011 в 18:01
источник

4 ответа

737

Чтобы извлечь архив в каталог, отличный от текущего, используйте параметр -C или --directory , tar, как в

tar -xf archive.tar -C /target/directory

Обратите внимание, что целевой каталог должен существовать до запуска этой команды (он может быть создан mkdir /target/directory ).

Прочтите страницу руководства (команда: man tar ) для других параметров.

    
ответ дан Wesley Rice 26.05.2011 в 18:16
источник
186

Обратите внимание, что если ваш архив уже содержит имя каталога, которое вы хотите изменить, добавьте параметр --strip-components=1 :

tar xf archive.tar -C /target/directory --strip-components=1
    
ответ дан Bryan Larsen 21.05.2014 в 20:32
18

Объединяя предыдущие ответы и комментарии:

Чтобы просто извлечь содержимое и создать целевой каталог, если он отсутствует:

mkdir -p /target/directory && tar xf archive.tar -C /target/directory

Чтобы извлечь, а также удалить корневой каталог (первый уровень) в zip

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1
    
ответ дан Thamme Gowda 27.06.2016 в 21:29
0

То, что я нашел интересным в отношении извлечения, заключается в том, что это зависит от того, как вы создали архив, см. этот пример

cd /tmp
mkdir folder
touch folder/file.txt

, когда вы делаете tar -zcvf folder.tar.gz folder , все как ожидалось = когда вы разворачиваете его сейчас, он будет нераспределен (папка будет создана, если вы ее удалили) в /tmp/folder/ .

Но, когда вы создадите tar как tar -zcvf tmp-folder.tar.gz /tmp/folder , и вы распакуете его в папке / tmp, результатом будет каталог /tmp/tmp/folder ! В таком случае вам нужно развернуть его до / - tar -xf tmp-folder.tar.gz -C /

    
ответ дан Betlista 02.09.2017 в 00:25