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


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


571
2018-05-26 16:01


Источник


Также, -C, --directory DIR\n change to directory DIR следует скорее описать как change output directory to DIR (will fail if DIR doesn't exist), Спасибо @Mich. См. Также ответ @ Bryan_Larsen. - valid
@Ujjwal Sing: Действительно, страница tar man не так полезна. Он описывает «-C DIR» как «изменение в DIR каталога». Еще хуже: «tar -C mydir xf archive.tar» не работает, в то время как «tar xf archive.tar -C mydir» делает. - Pat Morin


Ответы:


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

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

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

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


820
2018-05-26 16:16



Вы должны создать каталог вручную, хотя. - Jürgen Paul
Можно ли удалить путь: я просто извлечу файл - zzapper
Если это файл большего размера, когда вы запускаете команду, все, что вы получаете, не выводится в течение нескольких секунд или даже минут, пока оно работает. Вы можете исправить это, добавив -v флаг (подробный режим), в котором указано имя каждого файла, когда он извлекает его. - IQAndreas
@consultstan xkcd.com/1168 - Duncan X Simpson
Разве не удивительно, что после всех этих лет со всеми вариантами tar накопилось, до сих пор нет возможности создать выходной каталог, если он не существует? - EM0


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

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

211
2018-05-21 18:32



Спасибо. Загрузки через wget / etc всегда имеют родительский каталог. Это полный ответ imo - или должен быть указан в ответе выше. - bshea


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

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

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

20
2018-06-27 19:29





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

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

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

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

5
2018-03-22 21:49





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

tar zxvf tar-file directory-name/

1
2018-06-29 23:00





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

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 /


0
2017-09-01 22:25