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

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

794
задан 23 March 2016 в 05:18

6 ответов

Для извлечения архива в директорию, отличную от текущей, используйте -C, или --directory, tar вариант, как в

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

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

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

1054
ответ дан 22 November 2019 в 22:31

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

tar xf archive.tar -C /target/directory --strip-components=1
288
ответ дан 22 November 2019 в 22:31

Сочетание предыдущих ответов и комментариев:

Для простого извлечения содержимого и создания целевой директории, если она отсутствует:

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

Для извлечения, а также удаления каталога root(первого уровня) в zip

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1
35
ответ дан 22 November 2019 в 22:31

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

cd /tmp
mkdir folder
touch folder/file.txt

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

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

2
ответ дан 22 November 2019 в 22:31

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

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

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

tar zxvf filename.tgz --one-top-level=new_directory
29
ответ дан 22 November 2019 в 22:31

С tar 1.29, мы можем просто добавить имя каталога после имени файла tar. Например,

tar zxvf tar-file directory-name/
1
ответ дан 22 November 2019 в 22:31

Другие вопросы по тегам:

Похожие вопросы: