Я думал 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
Для извлечения, а также удаления каталога root(первого уровня) в zip
mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1
Что я нашел интересным в отношении извлечения, так это то, что это зависит от того, как вы создали архив, см. Этот пример
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 /
Другой вариант - использовать --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/