Mengapa gzipping file di stdin menghasilkan output yang lebih kecil daripada file yang sama yang diberikan sebagai argumen?

13

Ketika saya melakukannya:

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

Mengapa foo2.gzukurannya lebih kecil daripada foo1.gz?

Mikhal
sumber

Jawaban:

19

Karena itu menyimpan nama file dan stempel waktu sehingga dapat mencoba memulihkan keduanya setelah Anda mendekompres nanti. Karena foodiberikan gzipmelalui via <stdin>pada contoh kedua Anda, ia tidak dapat menyimpan informasi nama file dan cap waktu.

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

Saya telah membuat ulang masalah di sini:

[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

Dalam contoh saya, file.txt.gzadalah setara dengan Anda foo2.gz. Menggunakan -nopsi menonaktifkan perilaku ini ketika sebaliknya akan memiliki akses ke informasi:

[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

Seperti yang Anda lihat di atas, ukuran file untuk file.txtdan file3.txtcocok karena mereka sekarang sama-sama menghilangkan nama dan tanggal.

Bratchley
sumber