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!
linux
compression
tar
James
fonte
fonte
tar
ele não sabe em que tipo de dados possuistdin
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()
/ simplesexec()
para canalizar os dados por meio de um utilitário descompactado. O utilitário leria dostdin
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.)Respostas:
Esta não é a resposta que você deseja ouvir, mas isso não é suportado pelo GNU tar de acordo com o manual:
- 8.1.1 Criando e lendo arquivos compactados
fonte
Finalmente, percebi que não posso permitir que o tar detecte e descompacte o arquivo do stdin, porque eu uso o tar do GNU. O alcatrão BSD pode fazê-lo automaticamente sem problemas. Então eu decido usar o bsdtar em vez do tar no meu script agora.
fonte