Por que gzipar um arquivo em stdin produz uma saída menor que o mesmo arquivo dado como argumento?

13

Quando faço:

# gzip -c foo > foo1.gz 
# gzip < foo > foo2.gz

Por que foo2.gz acaba sendo menor em tamanho que foo1.gz ?

    
por MichalH 18.05.2015 / 01:14

1 resposta

19

Porque está salvando o nome do arquivo e o registro de data e hora para que ele possa tentar restaurar ambos depois de descompactá-lo depois. Como foo é dado a gzip via <stdin> em seu segundo exemplo, ele não pode armazenar as informações de nome de arquivo e registro de data e hora.

Na página de manual:

   -n --no-name
          When compressing, do not save the original file name and time stamp by default. (The original name is always saved if the name had
          to  be truncated.) When decompressing, do not restore the original file name if present (remove only the gzip suffix from the com-
          pressed file name) and do not restore the original time stamp if present (copy it from the compressed file). This  option  is  the
          default when decompressing.

   -N --name
          When compressing, always save the original file name and time stamp; this is the default. When decompressing, restore the original
          file name and time stamp if present. This option is useful on systems which have a limit on file name  length  or  when  the  time
          stamp has been lost after a file transfer.

Eu recriou o problema aqui:

[root@xxx601 ~]# cat /etc/fstab > file.txt
[root@xxx601 ~]# gzip < file.txt > file.txt.gz
[root@xxx601 ~]# gzip -c file.txt > file2.txt.gz
[root@xxx601 ~]# ll -h file*
-rw-r--r--. 1 root root  465 May 17 19:35 file2.txt.gz
-rw-r--r--. 1 root root 1.2K May 17 19:34 file.txt
-rw-r--r--. 1 root root  456 May 17 19:34 file.txt.gz

No meu exemplo, file.txt.gz é o equivalente do seu foo2.gz . Usar a opção -n desativa esse comportamento quando, de outro modo, teria acesso às informações:

[root@xxx601 ~]# gzip -nc file.txt > file3.txt.gz
[root@xxx601 ~]# ll -h file*
-rw-r--r--. 1 root root  465 May 17 19:35 file2.txt.gz
-rw-r--r--. 1 root root  456 May 17 19:43 file3.txt.gz
-rw-r--r--. 1 root root 1.2K May 17 19:34 file.txt
-rw-r--r--. 1 root root  456 May 17 19:34 file.txt.gz

Como você pode ver acima, os tamanhos dos arquivos para file.txt e file3.txt correspondem, pois agora eles omitem nome e data.

    
por 18.05.2015 / 01:47

Tags