O que achei interessante em relação à extração é que depende de como você criou o arquivo, veja este exemplo
cd /tmp
mkdir folder
touch folder/file.txt
quando você faz tar -zcvf folder.tar.gz foldertudo é como esperado = quando você descompactá-lo agora ele será descompactado (a pasta será criada, se você a removeu) como /tmp/folder/.
Mas, quando você criar tar as tar -zcvf tmp-folder.tar.gz /tmp/foldere descompactá-lo na pasta /tmp, o resultado será o /tmp/tmp/folderdiretório ! Nesse caso, você deve descompactá-lo para / -tar -xf tmp-folder.tar.gz -C /
Para extrair um arquivo para um diretório diferente do atual, use a opção
-C
, ou--directory
, tar, como emObserve que o diretório de destino deve existir antes de executar esse comando (ele pode ser criado por
mkdir /target/directory
).Leia a página de manual (comando:
man tar
) para outras opções.Observe que se o seu tarball já contém um nome de diretório que você deseja alterar, adicione a
--strip-components=1
opção:Combinando as respostas e comentários anteriores:
Para simplesmente extrair o conteúdo e criar o diretório de destino, se estiver faltando:
Para extrair e também remover o diretório raiz (primeiro nível) no zip
Outra opção é usar --one-top-level. Isso criará automaticamente um diretório com base no nome do arquivo original.
Além disso, se desejar, você pode especificar o seu próprio e o tar o criará automaticamente.
O que achei interessante em relação à extração é que depende de como você criou o arquivo, veja este exemplo
quando você faz
tar -zcvf folder.tar.gz folder
tudo é como esperado = quando você descompactá-lo agora ele será descompactado (a pasta será criada, se você a removeu) como/tmp/folder/
.Mas, quando você criar tar as
tar -zcvf tmp-folder.tar.gz /tmp/folder
e descompactá-lo na pasta /tmp, o resultado será o/tmp/tmp/folder
diretório ! Nesse caso, você deve descompactá-lo para / -tar -xf tmp-folder.tar.gz -C /