Como escolher o nome do diretório durante a untarring

107

Digamos que eu tenha o arquivo chamado ugly_name.tar , que quando extraído, se torna o diretório ugly_name . Que comando posso usar para que o nome do diretório resultante seja pretty_name ?

    
por Tshepang 10.04.2011 / 17:19

5 respostas

144

Isso deve funcionar:

mkdir pretty_name && tar xf ugly_name.tar -C pretty_name --strip-components 1

-C muda para o diretório especificado antes de descompactar (ou embalagem). --strip-components remove o número especificado de diretórios dos nomes de arquivos armazenados no archive.

Note que isso não é realmente portátil. O tar GNU e pelo menos alguns dos tars BSD têm a opção --strip-components , mas parece não existir em outras plataformas semelhantes a unix.

A maneira estúpida de fazer isso funcionaria praticamente em todos os lugares embora.

tar xf ugly_name.tar && mv ugly_name pretty_name
    
por 10.04.2011 / 17:45
30

Com tar GNU ≥1.16, use --transform para aplicar uma transformação de regexp de sed a cada nome de arquivo (a transformação é aplicada no caminho completo do arquivo):

tar xf foo.tar --transform 's!^ugly_name\($\|/\)!pretty_name!'

Se ugly_name é o componente de nível superior de todos os nomes de arquivo no arquivo, você não precisa se preocupar com a correspondência precisa:

tar xf foo.tar --transform 's/ugly_name/pretty_name/'

Se você não souber o nome do diretório de nível superior, ainda poderá usar esse método, embora prefira --strip-components em vez disso.

tar xf foo.tar --transform 's!^[^/]\+\($\|/\)!pretty_name!'

Com o pax , o utilitário de arquivo POSIX, use a opção -s , que leva uma expressão substituta sed-como um argumento.

pax -rf foo.tar -s '!^ugly_name\($\|/\)!pretty_name!'
pax -rf foo.tar -s '/ugly_name/pretty_name/'
pax -rf foo.tar -s '!^[^/]\+\($\|/\)!pretty_name!'
    
por 10.04.2011 / 17:51
7

Use isto:

tar -xvf ugly_name.tar
mv ugly_name pretty_name
    
por 12.10.2012 / 11:36
3

A maneira mais simples

tar xvf dml/ugly_name.tar --one-top-level=pretty_name --strip-components 1
    
por 21.09.2018 / 02:59
1

Do askUbuntu, esta resposta funcionou para mim:

tar zxvf ugly_name.tgz --one-top-level=pretty_name

'--one-top-level[=dir]'

Tells tar to create a new directory beneath the extraction directory (or the one passed to '-C') and use it to guard against tarbombs. In the absence of dir argument, the name of the new directory will be equal to the base name of the archive (file name minus the archive suffix, if recognized). Any member names that do not begin with that directory name (after transformations from '--transform' and '--strip-components') will be prefixed with it. Recognized file name suffixes are '.tar', and any compression suffixes recognizable by See -auto-compress.

    
por 07.06.2018 / 05:25

Tags