Como extraio com tar para um diretório diferente?

18

Isso não funciona:

tar xf /tmp/foo.tar.gz foo/bar
tar: foo/bar: Not found in archive

Não é óbvio para mim o que faria isso além de extraí-lo no lugar e mover os arquivos.

Kit Sunde
fonte

Respostas:

28

De man tar:

     -C directory
         In c and r mode, this changes the directory before adding the
         following files.  In x mode, change directories after opening the
         archive but before extracting entries from the archive.

ou seja, tar xC /foo/bar -f /tmp/foo.tar.gzdeve fazer o trabalho. (no FreeBSD, mas o GNU tar é basicamente o mesmo a esse respeito, consulte "Alterando o diretório de trabalho" em seu manual )

sr_
fonte
4
Eu recomendo testar esse comportamento com versões não-GNU do tar . A página de manual do Solaris menciona apenas essa opção na combinação de operações de adição e substituição . Sendo curioso, testei-o com uma operação de extração . Solaris' tar que não emitir qualquer erro ou aviso e extraído o arquivo na pasta atual =: - /
KTF
11
Também não funciona na versão do AIX do tar: 'Arquivo -C não está presente no archive' - o '-C' funciona para criar tarballs.
DarkHeart 13/02/15
É possível trocar o diretório principal por um novo nome?
Tofutim 9/03/16
9

se você deseja extrair um arquivo tar em outro lugar, basta cd para o diretório de destino e descompactá-lo lá:

 mkdir -p foo/bar
 cd foo/bar
 tar xzvf /tmp/foo.tar.gz

O comando que você usou pesquisaria o arquivo foo/barno arquivo e o extrairia.

ktf
fonte
9

Fazendo:

(cd foo/bar ; tar xf /tmp/foo.tar.gz )

faria o trabalho.

Basicamente, o que faz é gerar um novo shell (os parênteses), neste subshell, altere o diretório para foo/bare, em seguida, descompacte o arquivo.

Você pode alterar ;por &&para ter certeza de que cdfunciona bem.

jfg956
fonte
11
Uau, que você pode iniciar um shell assim é muito legal! Eu não tinha ideia de que você poderia fazer isso.
Kit Sunde
0
tar -xf ancd.tar.gz my/name/file

você pode dar o nome do arquivo com o ./filearquivo tar.

tar -xf ancd.tar.gz ./my/name/file

se estiver funcionando significa que você criou um alcatrão ./. use menos comando para ver o conteúdo do alcatrão.

less ...tar.file  
user2761565
fonte
0

Encontrei um problema semelhante e o resolvi.

O problema estava na criação do arquivo e não no arquivo criado.

Ao tentar fazer tar e transferir um arquivo no diretório A, forneço o caminho para o arquivo original no comando tar

tar -cvf MyFile.tar /foo/bar/dir/not/needed/path/*

O que eu pude fazer para resolver é

cd /foo/bar/dir/not/needed/
tar -cvf /tmp/MyFile.tar path*

Ao transferir e extrair o tarball, os subdiretórios necessários são criados.

tar -xvf MyFile.tar
OtisM
fonte
0

Mude o diretório onde você deseja extrair

cd /u02/restore

se o local do arquivo de extração em /u01/backup.tar,

Extraia da seguinte maneira:

cd /u02/restore
tar -xvf /u01/backup.tar
Teja
fonte
0

O comando:

tar -xzvf foo.tar.gz -C /home/user/bar/

extrairá o arquivo de entrada "foo.tar.gz" para o diretório /home/user/bar, enquanto imprime os arquivos processados.

tzabal
fonte