gz 파일을 분할하고 개별적으로 압축 해제

gz 파일을 분할하고 개별적으로 압축 해제

2.6GB 크기의 큰 .gz 파일이 있습니다. 크기 제한으로 인해 압축을 풀 수 없습니다. 파일은 하나의 큰 텍스트 파일입니다. 크기 제한 때문에 완전히 압축을 풀 수는 없습니다. 나는 그것을 10개의 개별 부분으로 나누고 각 개별 파일을 사용할 수 있도록 각각의 압축을 개별적으로 풀고 싶습니다.

내 질문은 다음과 같습니다

  1. 그게 가능합니까?
  2. 또한 답변의 일부로 제가 이 명령에 대해 잘 알지 못하기 때문에 명령도 제공할 수 있는지 여부를 묻습니다.

감사해요

답변1

압축 gzip형식은 여러 개의 작은 압축 파일에서 연결된 파일의 압축 해제를 지원하지만(압축 해제된 파일에는 연결된 압축 해제된 데이터가 포함됨) 잘린 압축 파일의 압축 해제는 지원하지 않습니다.

압축이 풀린 데이터의 "슬라이스"로 끝나기를 원한다고 가정하면 압축이 풀린 데이터를 dd여러 번 공급하여 매번 압축이 풀린 데이터의 다른 조각을 선택하여 파일에 저장하고 나머지는 삭제하여 이 문제를 해결할 수 있습니다. .

여기서는 작은 예제 텍스트 파일을 사용하고 있습니다. 반복적으로 압축을 풀고 있습니다(이것은~ 할 것이다큰 파일의 경우 약간의 시간이 걸립니다.) 그리고 매번 압축이 풀린 데이터에서 8바이트 조각을 선택합니다. 동일한 작업을 수행하지만 bs("블록 크기")에 훨씬 더 큰 값을 사용합니다.

$ cat file
hello
world
1
2
3
ABC

$ gzip -f file   # using -f to force compression here, since the example is so small

$ gunzip -c file.gz | dd skip=0 bs=8 count=1 of=fragment
1+0 records in
1+0 records out
8 bytes transferred in 0.007 secs (1063 bytes/sec)

$ cat fragment
hello
wo

$ gunzip -c file.gz | dd skip=1 bs=8 count=1 of=fragment
1+0 records in
1+0 records out
8 bytes transferred in 0.000 secs (19560 bytes/sec)

$ cat fragment
rld
1
2

(등.)

bs1/10 정도의 설정을 사용하십시오 .압축되지 않은파일 크기를 가지며, 반복할 때마다 skip0에서 1씩 증가합니다.


업데이트: 사용자는 압축되지 않은 데이터의 줄 수를 계산하려고 했습니다(질문에 첨부된 설명 참조). 이는 압축되지 않은 데이터의 일부를 디스크에 저장하지 않고도 쉽게 수행할 수 있습니다.

$ gunzip -c file.gz | wc -l

gunzip -c파일의 압축을 풀고 압축되지 않은 데이터를 표준 출력에 씁니다. 플래그 wc가 있는 유틸리티는 이 -l스트림에서 읽고 읽은 행 수를 계산합니다.

답변2

글쎄요, split당신을 위해 여러 가지 방법으로 기꺼이 나누어 드릴 것입니다.

10개의 개별 부품을 만들려면 압축되지 않은 파일의 크기를 알아야 합니다. 다음은 각각 크기가 약 1GiB인 파일을 제공합니다.

gunzip < bigfile.gz | split --line-bytes=1G - bigfile-split

1G는 여전히 텍스트 파일용으로 많이 사용되며, 많은 편집자들이 이러한 대용량 파일을 제대로 처리하지 못합니다. 따라서 실제로 수행하려는 작업에 따라 더 작은 분할을 원할 수도 있습니다. 또는 매번 압축을 풀어야 하는 경우에도 , 및 기타 도구 gz에 충분히 잘 작동하도록 그대로 두십시오 .zgrep

로그 파일인 경우 로그 회전을 미세 조정하여 자연스럽게 더 작은 분할을 생성할 수 있습니다.

관련 정보