Gnu/Linux 명령줄을 사용하여 한 파일을 다른 파일로 압축

Gnu/Linux 명령줄을 사용하여 한 파일을 다른 파일로 압축

MyFile라는 이름의 텍스트가 포함된 파일을 가져와서 동일한 디렉터리에 있는 파일 로 압축하려고 합니다 .MyFileComp

나는 시도했다:

gzip MyFile | touch MyFileComp
gzip MyFile >> MyFileComp

두 명령 모두 create MyFileComp이지만 파일을 열면 비어 있습니다. 파일의 압축을 풀려고 하면 알 수 없는 접미사가 표시됩니다. 이것이 무엇을 의미하는지 모르겠습니다.

어떤 도움이라도 대단히 감사하겠습니다. 감사해요

답변1

압축을 제대로 안하신 것 같네요. -c를 사용하여 stdout으로 보내고 끝에 ".gz"를 추가합니다. 이것이 문제인가요?

gzip -c MyFile > MyFileComp.gz
gzip -d MyFileComp.gz

답변2

기본적으로 이 도구는 명령줄에 지정된 이름의 파일을 압축할 때 gzip파일 이름 접미사가 붙은 파일을 생성합니다 . .gz마찬가지로 uncompress a file 을 사용하여 gzip -d명령줄에 압축된 파일 이름을 지정 하면 .gz 파일 이름 끝에 접미사가 있을 것으로 예상하고 해당 접미사를 제거하여 압축되지 않은 데이터의 파일 이름을 만듭니다.

이 동작을 따르지 않으려는 경우, 즉 압축 파일에 파일 이름 접미사를 전혀 사용하지 않고 를 사용하여 해당 파일의 압축을 풀고 싶다면 gzip -d명령줄에서 파일 이름을 지정할 수 없습니다 gzip. 대신 gzip표준 입력에서 읽고 표준 출력에 쓰겠습니다.

압축:

gzip <my_file >my_compressed_file

압축을 푼다:

gzip -d <my_compressed_file >my_file

기술적으로는 -c위의 두 명령과 함께 사용해야 하지만 gzip명령줄에 파일 이름이 지정되지 않았기 때문에 어쨌든 stdin에서 읽고 stdout에 쓰고 해당 스트림은 제공된 대로 리디렉션됩니다.

또한 위의 두 명령의 경우 소스 데이터(압축 명령의 소스인지 압축 해제 명령의 소스인지 여부)는 그대로 유지되는 반면, gzip도구를 평소와 같이 사용하는 경우에는 명령줄에서는 일반적으로 -k( ) 옵션을 사용하지 않으면 소스 파일이 삭제됩니다.--keep


주문

gzip MyFile | touch MyFileComp

이 두 명령을 서로 gzip MyFile독립적 으로 실행하십시오. touch MyFileComp파이프에는 데이터가 기록되지 않으며 gzip, 데이터가 있더라도 touch읽혀지지 않습니다. 결국 압축된 파일이 호출 MyFile.gz되고 빈 파일이 호출됩니다 MyFileComp(파일이 아직 존재하지 않는다고 가정). 파일이 MyFile삭제됩니다.

주문

gzip MyFile >> MyFileComp

이전과 동일하게 압축하고 MyFile표준 출력 에 아무 것도 기록하지 않으므로 빈 파일이 생성됩니다 (아직 존재하지 않는다고 가정). 파일이 삭제됩니다.MyFile.gzgzipMyFileCompMyFile

답변3

기본적으로 원하는 파일 이름으로 리디렉션할 수 있도록 gzip -c압축됩니다 . STDOUT당신이 찾고 있는 반전은 또는 을 강제로 시도하더라도 (1.6 기준) 없이 거부되기 zcat때문 입니다.gzip -dgunzip-f.gz

gzip -c MyFile > MyFileComp
zcat MyFileComp > MyFile

경고하다: MyFile이미 존재하는 경우 덮어쓰게 됩니다.

관련 정보