'tar c file | tar x 'grava o arquivo em um caminho inesperado

0

Se eu usar o seguinte comando:

cd /Users/you/foo 
tar c /Users/you/x/y/z | tar x

ele irá escrever /Users/you/x/y/z no diretório local para este caminho:

/Users/you/foo/Users/you/x/y/z

como eu posso mudar um dos comandos tar, então o arquivo é escrito aqui:

/Users/you/foo/z

man tar na minha máquina MacOS não produziu soluções óbvias para esta, e não tenho certeza se esse comportamento pode ser alterado.

    
por Alexander Mills 14.05.2018 / 23:18

2 respostas

2

O que faço ao copiar coisas é:

tar c here/is/the/stuff | (cd /where/it/should/go; tar x)

Explicação: Os primeiros pacotes tar para a saída padrão são canalizados para o segundo comando, que é um subshell (o ( inicia), que altera o diretório e, em seguida, executa o segundo tar . Isso é bom se você quiser usar, e. preenchimento de arquivo para nomes confusos. Ou você pode usar a opção -C para alterar o diretório antes de executar a operação, como:

tar c here/is/the/stuff | tar -C /where/it/should/go -x
    
por 17.05.2018 / 19:12
0

Acho que consegui que isso funcionasse usando a opção -O de tar x , que permite gravar a saída em stdout, de modo que pareça:

tar c /Users/you/x/y/z | tar x -O > z.tgz

um problema com essa técnica é que ela não parece ser compatível com a gravação de vários arquivos:

tar c z1 z2 z3 | tar x -O > z.tgz

parece que z.tgz irá representar apenas z3 ...

    
por 14.05.2018 / 23:22

Tags