Я думал 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-стиля, которое ломает вещи, как … честно говоря, отчасти ожидаемо. Традиционные флаги передаются все как один большой двоичный объект в качестве первого аргумента. Вы не можете ожидать, что они сработают, если они не первые. (Я имею в виду, да, это можно интерпретировать в любом случае - я хочу сказать, что это было бы выше всяких похвал, а не стандартно)