Como descompactar um tar.gz em outro diretório

270

Eu tenho um arquivo

* .tar.gz

Como posso descompactar isso em um diretório de destino?

Mercer
fonte
9
Por que todos os votos negativos? Existem mais opções do que apenas -C (e talvez a versão dele não forneça isso).
Alfe 23/08/2013
2
Stack Overflow é um site para perguntas sobre programação e desenvolvimento. Esta questão parece estar fora de tópico, porque não se trata de programação ou desenvolvimento. Consulte Quais tópicos posso perguntar aqui na Central de Ajuda. Talvez o Superusuário ou o Unix e Linux Stack Exchange sejam um lugar melhor para perguntar.
JWW
@jww Enquanto vejo o seu ponto, também temos tags nomeadas tare gzem torno deste fórum. A extração de um tarball em um diretório específico pode muito bem fazer parte de um script shell e, portanto, parte da programação. Eu acho que esse tipo de pergunta pode ser feita em qualquer fórum então.
Alfe

Respostas:

319

Você pode usar a opção -C(ou --directoryse 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 tarcapaz de extrair para um diretório específico, poderá simplesmente cdentrar 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
Alfe
fonte
107
gzip -dc archive.tar.gz | tar -xf - -C /destination

ou, com alcatrão GNU

tar xzf archive.tar.gz -C /destination
Mercer
fonte
3
Eu gosto da noção de usar gzipcaso o alcatrão não entenda os arquivos compactados.
Alfe
4

Extrai myArchive.tar para / destinationDirectory

Comandos:

cd /destinationDirectory
pax -rv -f myArchive.tar -s ',^/,,'
javaPlease42
fonte
0

Você pode usar o loop for para descompactar vários arquivos .tar.gz em outra pasta. O código a seguir utilizará / destination / folder / path como argumento para o script e desmarcará todos os arquivos .tar.gz presentes no local atual em / 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
Rahul Shivalkar
fonte