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.