Как распаковать tar.gz в другой каталог

270

У меня есть архив

* .tar.gz

Как я могу распаковать это в каталоге назначения?

торговец шелк и бархат
источник
9
Почему все отрицательные? Вариантов больше, чем просто -C (и, возможно, его версия этого не обеспечивает).
Alfe
2
Stack Overflow - сайт для вопросов программирования и разработки. Этот вопрос кажется не по теме, потому что он не касается программирования или разработки. Смотрите, какие темы я могу задать здесь, в Справочном центре. Возможно, лучше спросить Super User или Unix & Linux Stack Exchange .
jww
@jww Хотя я понимаю вашу точку зрения, у нас также есть теги с именами tarи gzна этом форуме. Извлечение архива в конкретный каталог вполне может быть частью сценария оболочки и, следовательно, частью программирования. Я думаю, что такой вопрос можно задать на любом из форумов.
Альфе

Ответы:

319

Вы можете использовать опцию -C(или, --directoryесли вы предпочитаете длинные опции), чтобы указать целевой каталог по вашему выбору, если вы используете версию Gnu tar. Каталог должен существовать:

mkdir foo
tar -xzf bar.tar.gz -C foo

Если вы не используете tarвозможность извлечения в определенный каталог, вы можете просто cdв целевой каталог перед вызовом tar; тогда вам, конечно, придется указать полный путь к вашему архиву. Вы можете сделать это в подоболочке, чтобы не влиять на окружающий скрипт:

mkdir foo
(cd foo; tar -xzf ../bar.tar.gz)  # instead of ../ you can use an absolute path as well

Или, если не подходит ни абсолютный путь, ни относительный путь к архивному файлу, вы также можете использовать его для присвоения имени архиву за пределами подобласти оболочки:

TARGET_PATH=a/very/complex/path/which/might/even/be/absolute
mkdir -p "$TARGET_PATH"
(cd "$TARGET_PATH"; tar -xzf -) < bar.tar.gz
Альфей
источник
107
gzip -dc archive.tar.gz | tar -xf - -C /destination

или с помощью GNU tar

tar xzf archive.tar.gz -C /destination
торговец шелк и бархат
источник
3
Мне нравится понятие использования gzipв случае, если tar не понимает архивные архивы.
Alfe
4

Экстракты myArchive.tar к / destinationDirectory

Команды:

cd /destinationDirectory
pax -rv -f myArchive.tar -s ',^/,,'
javaPlease42
источник
0

Вы можете использовать для цикла, чтобы распаковать несколько файлов .tar.gz в другую папку. Следующий код будет принимать / destination / folder / path в качестве аргумента сценария и распаковывать все файлы .tar.gz, имеющиеся в текущем местоположении в / destination / folder / path.

if [ $# -ne 1 ];
 then
 echo "invalid argument/s"
 echo "Usage: ./script-file-name.sh /target/directory"
 exit 0
fi
for file in *.tar.gz
do
    tar -zxvf "$file" --directory $1
done
Рахул Шивалкар
источник