stdinでファイルをgzip圧縮すると、引数として指定された同じファイルよりも小さい出力が生成されるのはなぜですか?


13

私がする時:

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

なぜfoo2.gzサイズが小さくなるのfoo1.gzですか?

回答:


19

ファイル名とタイムスタンプを保存しているので、後で解凍した後、両方の復元を試みることができます。2番目の例ではvia に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.txtfile3.txt一致彼らは今の省略名と日付の両方をしているので。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.