보관하는 동안 원본 파일. 기본적으로 다음 명령을 실행하면

gzip file.txt 

이 파일이 수정되고 file.txt.gz 이름이 변경됩니다. 이 동작 대신에 기존 파일에 에 새 압축 파일을 추가하고 싶습니다. file.txt. 지금은 다음 명령을 사용하여 수행하고 있습니다.

gzip -c file.txt > file.txt.gz 

작동하지만 이러한 일반적인 작업을 수행하는 더 쉬운 솔루션이없는 이유가 궁금합니다. 이 옵션을 놓쳤을 수도 있습니다.

코멘트

  • 이는 gzip이 주어진 파일을 압축하고 새 파일을 생성하기 때문입니다. 압축은 원본 파일을 압축하여 새 파일로 교체하는 것을 의미합니다. " -c " 옵션은 gzip에 다른 이름으로 저장하도록 명시 적으로 지시합니다. 그게 ' 작동하는 이유입니다.
  • @SHW 저는 ' 댓글을받지 못했습니다 …?
  • @ManuelSelva 원본 파일이 압축되면 ' 더 이상 필요하지 않습니다. 이것이 디자인 인 것 같습니다.
  • gzip / gunzip을 사용하는 이유 다른 유닉스 도구가이 작업을 수행하지 않는 경우 기본적으로 수행하십시오.

답변

GNU gzip 1.6 이상, FreeBSD 및 파생 제품 또는 최신 버전의 NetBSD는 를 참조하십시오. don_cristi “s answer .

모든 버전에서 다음과 같이 셸 리디렉션을 사용할 수 있습니다.

gzip < file > file.gz 

제공되지 않은 경우 모든 인수, gzip는 표준 입력을 읽고 압축 한 다음 압축 된 버전을 표준 출력에 씁니다. 보너스로 셸 리디렉션을 사용할 때 파일에 대해 걱정할 필요가 없습니다. "--help" 또는 "-" (후자는 여전히 gzip -c --의 경우 문제가됩니다.

gzip -c file > file.gz에 대한 또 다른 이점은 file를 열 수 없습니다. 빈 file.gz를 만들거나 기존 file.gz를 덮어 쓰지 않으면 명령이 실패합니다. gzip를 전혀 실행하지 않습니다.

gzip -k와 비교했을 때 큰 차이점은 시도가 없다는 것입니다. file “의 메타 데이터 (소유권, 권한, 수정 시간, 압축되지 않은 파일 이름)를 file.gz에 복사합니다.

또한 file.gz이 이미 존재하는 경우 셸에서 noclobber 옵션을 설정하지 않는 한 자동으로 재정의합니다 (set -o noclobber (예 : POSIX 쉘의 경우)).

댓글

  • 이제 OP

    의 질문 및 답변 일반적인 질문 " gzip에 원본 파일을 유지하는 방법 ". -c보다 매우 편리하고 유용합니다.

  • < 및 >는 실제로 명령에 입력되어야하며 파일 이름에 대한 자리 표시자를 나타내지 않습니다.
  • '의 -k 옵션? ' 맨 페이지에서 찾을 수 없습니다 (예 : 이 버전은 linux.die.net/man/1/gzip 에 있습니다. 또한 gzip은 기본적으로 파일 '의 메타 데이터를 복사하는 것 같습니다.
  • @ flow2k, that ' s don_cristi '의 답변에 대한 링크입니다.
  • @St é phaneChazelas gzip 버전 1.4에서도 작업 중입니다. cat file | gzip > file.gz

답변

최근 (2013 년 6 월 ) 출시됨 gzip-1.6 " –keep 허용 (-k) 옵션, xz, lzip 및 bzip2와 같은 도구와의 일관성을 위해. 이 옵션을 사용하면 gzip이 더 이상 압축 또는 압축 해제시 명명 된 입력 파일을 제거하지 않습니다 " .

맨 페이지에서 발췌 :

 -k --keep Keep (don"t delete) input files during compression or decompression. 

따라서 1.6부터는 -k 또는 --keep 원본 파일 유지 :

gzip -k -- "$file" 

($file- (gzip-<라는 실제 파일 대신 stdin 을 의미하는 것으로 해석합니다. / div>),이 경우 ./-로 변경해야합니다.

이 옵션은 입니다. bzip2와의 일관성을 위해 gzip (2007 년 FreeBSD 7.0)의 FreeBSD 구현에 처음 도입되었습니다. 그 gzip는 NetBSD의 GNU gzip 재 작성을 기반으로합니다. -k 옵션은 결국 NetBSD로 돌아 왔습니다. 2010 년 .

댓글

  • Geez. RHEL6은 기본적으로 zip 1.3.12와 함께 제공됩니다 …
  • Mac / OS X에서 작동합니다. 🙂 (BSD)

= 1.6 더 이상? 답변에 업데이트가 필요한지 궁금하십니까?

  • "-"는 무엇입니까? gzip -k " file "가 잘 작동하는 것 같습니다.
  • @notilas see unix.stackexchange.com/q/11376/22142
  • 답변

    문서에서 파일 사본을 만드는 옵션이없는 것 같습니다.

    셸 함수를 정의 할 수 있습니다.

    gzipkeep() { if [ -f "$1" ] ; then gzip -c -- "$1" > "$1.gz" fi } 

    그리고

    gzipkeep file.txt 

    댓글

    • 파일이 , gzipkeep ./-로 호출해야합니다.
    • 출력 파일을 확인할 수 있으므로 스크립트 IMO에 가장 적합한 솔루션입니다. > "$1.gz"는 지정된대로 정확히 존재합니다. 또한 필요한 경우 다른 이름을 지정할 수도 있습니다.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다