표준 입력에서 파일을 gzip하면 인수로 제공된 동일한 파일보다 더 작은 출력이 생성되는 이유는 무엇입니까?

표준 입력에서 파일을 gzip하면 인수로 제공된 동일한 파일보다 더 작은 출력이 생성되는 이유는 무엇입니까?

내가 할 때 :

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

foo2.gz최종 크기가 보다 작은 이유는 무엇 입니까 foo1.gz?

답변1

압축을 푼 후 나중에 복구할 수 있도록 파일 이름과 타임스탬프를 저장하기 때문입니다. 두 번째 예에서는 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위에서 볼 수 있듯이 이제 이름과 날짜가 생략되었기 때문에 및 파일 크기가 일치합니다.

관련 정보