Como descompactar um arquivo pulando o início da estrutura de diretórios?

4

Eu criei arquivos tar com um caminho absoluto para salvar os arquivos.

/home/mydir/dir1/dir2/dir3/file1.dat
/home/mydir/dir1/dir2/dir3/file2.dat
/home/mydir/dir1/dir2/dir3/file3.dat

Eu gostaria de descompactar esses arquivos ignorando a parte inicial do caminho, /home/mydir/dir1 . Meus arquivos devem ser restaurados em qualquer diretório com essa estrutura:

dir2/dir3/file1.dat
dir2/dir3/file2.dat
dir2/dir3/file3.dat

Como posso fazer isso com o comando tar ou de outra maneira?

    
por JeanJouX 11.09.2015 / 20:08

2 respostas

3

Se você estiver usando o GNU tar, então há uma opção para remover alguns levando os membros do caminho ao extrair:

 '--strip-components=number'

    Strip given number of leading components from file names before extraction.

For example, suppose you have archived whole '/usr' hierarchy to a
tar archive named 'usr.tar'. Among other files, this archive
contains 'usr/include/stdlib.h', which you wish to extract to the
current working directory. To do so, you type:

$ tar -xf usr.tar --strip=2 usr/include/stdlib.h

(Da documentação do GNU tar .)

No seu caso, --strip=3 deve ser aplicado.

    
por 11.09.2015 / 20:33
2

Com o GNU tar (encontrado em Linux e Cygwin não integrados), é possível aplicar uma substituição de expressão regular aos caminhos ao adicionar membros a um arquivo ou ao extraí-los com o --transform option .

tar -xf foo.tar --transform='s!^/home/mydir/dir1/!!'

Com o * tar do BSD (incluindo o OSX), há uma semelhante opção chamada -s .

tar -xf foo.tar -s '!^/home/mydir/dir1/!!'

POSIX tem o comando pax com a mesma opção que o BSD tar.

pax -r <foo.tar -s '!^/home/mydir/dir1/!!'
    
por 12.09.2015 / 02:25