Compactar arquivos enquanto lê dados do STDIN

127

É possível compactar (criar um arquivo compactado) dados durante a leitura do stdin no Linux?

Espaço
fonte
Eu estou votando para fechar esta questão como off-topic porque pertence a Unix e Linux
Dan Dascalescu

Respostas:

180

Sim, use gzip para isso. A melhor maneira é ler os dados como entrada e redirecionar o arquivo compactado para saída, ou seja,

cat test.csv | gzip > test.csv.gz

cat test.csvenviará os dados como stdout e, usando o pipe-sign, o gzip lerá esses dados como stdin. Certifique-se de redirecionar a saída gzip para algum arquivo, pois os dados compactados não serão gravados no terminal.

Espaço
fonte
4
Observe que os arquivos test.csv.gz permanecem com tamanho 0 até que o fluxo de dados seja fechado.
MUY Belgium
... e como alguém faz isso? É realmente uma pergunta separada?
russellpierce
9
Isso também funciona com xz:mysqldump mydb | xz > dbdump.sql.xz
jeroen
1
Pode usar -9, o nível de compactação padrão é -6.
Pablo A #
110

Sim, gzippermitirá que você faça isso. Se você simplesmente executar gzip > foo.gz, ele compactará STDIN no arquivo foo.gz. Você também pode canalizar dados para ele, como some_command | gzip > foo.gz.

jtbandes
fonte
1

gzip > stdin.gzpossivelmente? Caso contrário, você precisará detalhar sua pergunta.

retrátil
fonte