Eu uso o GNU tar. Ele pode detectar automaticamente o tipo de compactação ao compactar / descompactar arquivos. Mas preciso descomprimir um arquivo do stdin e o tipo de compactação é desconhecido. Notei que o alcatrão pode me dar sugestões corretas, como:
tar: Archive is compressed. Use -z option
Mas eu quero que o tar use essa opção de compactação automaticamente sem me pedir para inserir esse argumento. Como eu posso fazer isso? Por que não tar apenas descomprimir, uma vez que já conhece o tipo de compactação?
Obrigado!
tar
ele não sabe em que tipo de dados possui stdin
até depois de lê-los e, então, é tarde demais para chamar o programa descompactado. Ele suporta gzip, bzip2 e outros. Não é fácil contornar esse problema (seria necessário armazenar em buffer os dados); portanto, é necessário que você tente novamente.
fork()
/ simples exec()
para canalizar os dados por meio de um utilitário descompactado. O utilitário leria do stdin
canal e o primeiro 4K estaria ausente. Não há como colocar os dados de volta no tubo após a leitura.
cat buffer - | gunzip
. (Em alternativa, sem bloqueio de I / O pode ser utilizada para evitar a necessidade para o processo extra.)