Как извлечь файлы в другой каталог с помощью команды «tar»?
Я думал, что tar archive.tar /users/mylocation
будет работать, но это не так. Как я могу это сделать?
6 ответов
Чтобы извлечь архив в каталог, отличный от текущего, используйте опцию -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
С tar 1.29 мы можем просто добавить имя каталога после имени файла tar. Например,
tar zxvf tar-file directory-name/
То, что я нашел интересным в отношении извлечения, заключается в том, что это зависит от того, как вы создали архив, см. этот пример
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 /