Perché gzipping di un file su stdin produce un output più piccolo rispetto allo stesso file fornito come argomento?


13

Quando io faccio:

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

Perché foo2.gzfinisce per essere più piccolo di foo1.gz?

Risposte:


19

Perché sta salvando il nome file e il timestamp in modo che possa provare a ripristinare entrambi dopo averlo decompresso in seguito. Poiché nel secondo esempio fooviene indicato gzipvia <stdin>, non è possibile memorizzare le informazioni sul nome file e sul timestamp.

Dalla manpage:

   -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.

Ho ricreato il problema qui:

[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

Nel mio esempio, file.txt.gzè l'equivalente del tuo foo2.gz. L'uso -ndell'opzione disabilita questo comportamento quando altrimenti avrebbe accesso alle informazioni:

[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

Come puoi vedere sopra, le dimensioni dei file per file.txte file3.txtcorrispondono poiché ora entrambi omettono nome e data.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.