보관하는 동안 원본 파일. 기본적으로 다음 명령을 실행하면
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"
는 지정된대로 정확히 존재합니다. 또한 필요한 경우 다른 이름을 지정할 수도 있습니다.