Чому gzipping файл на stdin дає менший вихід, ніж той самий файл, який задається як аргумент?


13

Коли я роблю:

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

Чому в foo2.gzкінцевому підсумку менше розмірів, ніж foo1.gz?

Відповіді:


19

Оскільки це збереження імені файлу та часової позначки, щоб воно могло спробувати відновити обидва після того, як ви декомпресуєте його пізніше. Оскільки fooце вказано gzipчерез <stdin>у другому прикладі, він не може зберігати інформацію про ім'я файлу та часові позначки.

На сторінці сторінки:

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

Я відтворив цю проблему тут:

[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

У моєму прикладі file.txt.gzце еквівалент вашого foo2.gz. Використання -nопції відключає таку поведінку, коли в іншому випадку буде доступ до інформації:

[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

Як ви бачите вище, розміри файлів file.txtі file3.txtзбігаються, оскільки тепер вони опускають ім'я та дату.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.