Você pode usar a opção -C
(ou --directory
se preferir opções longas) para fornecer o diretório de destino de sua escolha, caso esteja usando a versão Gnu do tar
. O diretório deve existir:
mkdir foo
tar -xzf bar.tar.gz -C foo
Se você não estiver usando um recurso tar
capaz de extrair para um diretório específico, poderá simplesmente cd
entrar no diretório de destino antes da chamada tar
; então você terá que fornecer um caminho completo para o seu arquivo, é claro. Você pode fazer isso em um subshell de escopo para evitar influenciar o script ao redor:
mkdir foo
(cd foo; tar -xzf ../bar.tar.gz) # instead of ../ you can use an absolute path as well
Ou, se nem um caminho absoluto nem um caminho relativo para o arquivo morto for adequado, você também poderá usá-lo para nomear o arquivo morto fora do subshell de escopo:
TARGET_PATH=a/very/complex/path/which/might/even/be/absolute
mkdir -p "$TARGET_PATH"
(cd "$TARGET_PATH"; tar -xzf -) < bar.tar.gz