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

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

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

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

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

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

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

tar xf archive.tar -C /target/directory --strip-components=1

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

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

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

Другой вариант - использовать --one-top-level. Это автоматически создаст каталог на основе имени файла оригинала.

tar zxvf filename.tgz --one-top-level

Кроме того, если вы хотите, вы можете указать свой собственный, и tar создаст его автоматически.

tar zxvf filename.tgz --one-top-level=new_directory

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

cd /tmpmkdir foldertouch 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 /

@Ujjwal Sing : Действительно, страница tar man не так уж полезна. Он описывает “-C DIR” как “изменить на каталог DIR” . Еще хуже: “tar -C mydir xf archive.tar” не работает, в то время как “tar xf archive.tar -C mydir” работает.

Кроме того, -C, --directory DIR\n изменить на directory DIR скорее следует описывать как изменить выходной каталог на DIR (произойдет сбой, если DIR не существует). Спасибо @Mich. Смотрите также ответ @Bryan_Larsen.

@PatMorin Честно говоря, как только вы поймете соглашения о вызове аргументов, которые вы используете, это имеет смысл. Вы также можете сделать tar XFC archive.tar mydir или tar -C mydir -xf archive.tar. Это всего лишь смешивание флагов традиционного стиля и GNU-стиля, которое ломает вещи, как … честно говоря, отчасти ожидаемо. Традиционные флаги передаются все как один большой двоичный объект в качестве первого аргумента. Вы не можете ожидать, что они сработают, если они не первые. (Я имею в виду, да, это можно интерпретировать в любом случае - я хочу сказать, что это было бы выше всяких похвал, а не стандартно)