Nome do arquivo de controle armazenado no arquivo tar

1

Eu quero fazer um arquivo tar contendo vários arquivos espalhados pelo sistema de arquivos:

$ tar czvf outfile.tar.gz /some/file /some/other/filename

Isso cria o arquivo com êxito, mas quando eu o extraio, os arquivos ainda estão em uma árvore de diretórios que corresponde aos locais originais:

$ tar xvf outfile.tar.gz
some/file
some/other/filename

Eu gostaria de ter ambos extraídos para o diretório atual, de modo que file e filename sejam criados por conta própria.

Eu posso fazer isso no momento da extração usando --transform , por exemplo:

$ tar xvf outfile.tar.gz --transform=s,.*/,,

Isso faz o que eu quero, mas é um pouco chato ter que usar uma opção obscura no tempo de extração, torna mais difícil enviar para outras pessoas, e assim por diante.

Eu poderia fazer isso em tempo de criação assim:

$ cd tmpdir
$ cp /some/file /some/other/filename .
$ tar czvf outfile.tar.gz *

Mas isso parece um pouco pesado, especialmente se houver arquivos grandes ou muitos deles.

Existe alguma maneira de controlar os nomes dos arquivos que tar armazena diretamente no tempo de criação?

    
por Tom Hunt 14.09.2016 / 20:33

2 respostas

2

Não --transform funciona ao criar o arquivo, então? Parece funcionar no meu GNU tar 1.27.1:

$ tar czf out.tar.gz some/foo some/other/bar --transform=s,.*/,,
$ tar tzf out.tar.gz 
foo
bar

Se não funcionar, outra possibilidade seria criar links para os arquivos no diretório atual (como você fez com cp , mas com ln ):

$ ln /some/foo /some/other/bar .
$ tar czf out.tar.gz foo bar
    
por 14.09.2016 / 20:40
1

Existe uma ferramenta muito útil chamada tardia que pode ser usada para editar tar arquivos:

tardy -Remove_Prefix 55 outfile.tar.gz transformed.tar.gz

Aqui 55 é um número arbitrário maior que a profundidade máxima de todos os diretórios em outfile.tar.gz . -Remove_Prefix 55 informa tardy para remover (no máximo) 55 diretórios principais dos nomes de arquivos.

    
por 14.09.2016 / 20:50

Tags