tar: comprime o texto stdin e stdout [duplicado]

1

Usando tar , é possível compactar o texto stdin e os dados compactados aparecerem no stdout? Exemplo:

$ echo "test" | tar c - 
<compressed blob here>

Estou usando o macOS Mojave.

    
por user322355 22.11.2018 / 19:09

1 resposta

1

Em suma, não, não é possível fazer isso sem armazenar todo o conteúdo de stdin em um arquivo ou arquivo temporário (por exemplo, na memória.)

Esta é uma limitação do próprio formato de arquivo tar, já que antes de armazenar o conteúdo do arquivo, o tar armazena um descritor para o arquivo, incluindo o nome do arquivo, etc. e também o arquivo tamanho . Então o tar precisa saber qual é o tamanho do arquivo antes de armazená-lo. Ao ler a partir de stdin, o tar não pode saber o tamanho do conteúdo, a menos que ele leia todos eles, caso em que precisará armazená-los em algum lugar, a fim de armazenar esses conteúdos no tarball.

Veja também " É possível fazer um arquivo .tar.gz diretamente do stdin? Ou, eu preciso tar juntos arquivos já gzipados. " Uma das respostas lista uma maneira para armazenar o conteúdo do arquivo primeiro, em seguida, procure novamente e atualize o descritor de arquivo para gravar o tamanho real do conteúdo. Mas isso requer a capacidade de procurar no arquivo de saída, o que geralmente não é o caso se você estiver gravando no stdout ...

Em suma, você precisa escrever sua entrada para um arquivo temporário, a fim de adicioná-lo a um tarball.

    
por 22.11.2018 / 19:30