descompacta 'tar' mas altera o nome do diretório para extrair para

23
tar -tf filename.tar
folder1/file
folder1/name
[...]

Gostaria de extrair arquivo e nome para arquivo2 . Isso pode ser feito como um one-liner?

    
por Felipe Alvarez 30.05.2010 / 02:32

2 respostas

30

Use -C e --strip-components (consulte man tar ).

Exemplo:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz - -C FOLDER --strip-components=1

# for local tar file
tar -xz FILENAME -C FOLDER --strip-components=1

Explicação:

O sinalizador C assume que um diretório já está no lugar, portanto, o conteúdo do arquivo tar pode ser expandido nele. daí o mkdir FOLDER .

O strip-components flag é usado quando um arquivo tar se expande naturalmente para uma pasta, digamos, como o github, onde ele é um exemplo para a pasta repo-name-master . É claro que você não precisaria da pasta de primeiro nível gerada aqui, então strip-components definido como 1 removeria automaticamente a primeira pasta para você. Quanto maior o número definido, as pastas nester mais profundas serão removidas.

    
por 30.05.2010 / 02:52
16

Você também pode usar a opção --transform para um pouco mais de flexibilidade. Aceita qualquer operação de reposição de sed (s).

Por exemplo, é assim que eu extraio um tarball do Linux para um novo diretório para poder aplicar um patch:

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
    
por 24.03.2011 / 23:30

Tags