원본 파일을 유지하도록 gzip에 지시하는 방법은 무엇입니까?


210

원본 파일 을 유지 하면서 gzip 명령 줄 도구를 사용하여 텍스트 파일을 압축하고 싶습니다 . 기본적으로 다음 명령을 실행

gzip file.txt

이 파일을 수정하고 이름을 바꿉니다 file.txt.gz. 대신에이 문제의 나는이 새로운 압축 파일 싶은 또한 기존의 하나를 file.txt. 지금은 다음 명령을 사용하여 수행하고 있습니다.

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

작동하지만 왜 일반적인 작업을 수행하기 쉬운 솔루션이 없는지 궁금합니다. 어쩌면 나는 그 일을하는 옵션을 놓쳤습니까?


3
gzip은 주어진 파일을 압축하고 새 파일을 생성하기 때문입니다. 압축은 원본 파일을 압축하여 새 파일로 바꾸는 것을 의미합니다. "-c"옵션은 gzip에게 다른 이름으로 저장하도록 명시 적으로 지시합니다. 그것이 작동하는 이유
SHW

@SHW 나는 당신의 의견을 얻지 못했습니다 ...?
마누엘 셀바

@ManuelSelva 원래 파일이 압축되면 더 이상 필요하지 않습니다.
데이지

2
GZIP / gunzip을 이렇게 왜 기본적으로 할 때 다른 유닉스 도구를 사용하지 않습니다이 내 능력 밖입니다.
Mateen Ulhaq

답변:


247

GNU gzip1.6 이상, FreeBSD 및 파생물 또는 최신 NetBSD 버전은 don_cristi 's answer를 참조하십시오 .

모든 버전에서 다음과 같이 쉘 재 지정을 사용할 수 있습니다.

gzip < file > file.gz

인수가 없으면 gzip표준 입력을 읽고 압축 한 다음 압축 된 버전을 표준 출력에 씁니다. 쉘 리디렉션을 사용하는 경우 보너스로, 당신은라는 파일에 대해 걱정할 필요가 없습니다 "--help"거나 "-"(즉, 후자는 여전히에 대한 문제가되고 gzip -c --).

또 다른 이점 gzip -c file > file.gzfile열 수 없으면 빈을 만들 file.gz거나 기존을 덮어 쓰지 file.gz않고 실행 하지 않고 명령이 실패한다는 gzip것입니다.

gzip -k그럼에도 불구하고 중요한 차이점 은 file의 메타 데이터 (소유권, 권한, 수정 시간, 압축되지 않은 파일 이름)를 에 복사하려는 시도가 없다는 것 file.gz입니다.

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


4
이제 이것은 OP 질문의 세부 사항을 다루고 일반적인 질문 "gzip에게 원본 파일을 유지하는 방법"에 대답합니다. 보다 편리하고 유용합니다 -c.
codewaggle

8
<및>는 실제로 명령에 입력되어야하고 파일 이름의 자리 표시자를 나타내지 않습니다.
Gaurav Gupta

-k옵션 은 무엇입니까 ? 매뉴얼 페이지에서 찾을 수 없습니다 (예 :이 버전은 linux.die.net/man/1/gzip) . 또한 gzip은 기본적으로 파일의 메타 데이터를 복사하는 것처럼 보입니다.
flow2k 2016 년

1
@ flow2k, 이것이 don_cristi의 답변에 대한 링크입니다.
Stéphane Chazelas 2016 년

아, 나는 내 macos에서 그것을 볼 수 있지만 RHEL이나 Ubuntu에서는 그렇지 않습니다. 감사.
flow2k

138

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

매뉴얼 페이지에서 발췌 :

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

따라서 또는 로 원본 파일을 1.6사용 -k하거나 --keep유지할 수 있습니다 .

gzip -k -- "$file"

(경우 작동하지 않습니다 $file이다 -하는 ( gzip의미로 해석 표준 입력 대신 호출 실제 파일의 -경우에, 당신은 그것을 변경해야) ./-)

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


10
이런. RHEL6는 ...베이스 우편 1.3.12와 함께 제공
니콜라스 톨리 코트렐에게

이것은 Mac / OS X에서 작동합니다 :) (BSD)
paul

더 이상 1.6을 사용하지 않는 많은 표준 배포판이 있습니까? 대답은 UPDAT 필요가 있는지 궁금
MichaelChirico

"-"는 무엇입니까? gzip -k "file"이 제대로 작동한다고 생각합니다.
notilas


30

문서에서 파일 사본을 작성하는 옵션이없는 것 같습니다.

쉘 함수를 정의 할 수 있습니다

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

그리고

gzipkeep file.txt

2
파일이 -이면로 호출해야합니다 gzipkeep ./-.
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.