2013-02-08 3 views
3

나는 .bz2 파일을 가지고 있습니다. 너무 큽니다로서 그것을 압축하지 않고 처음 또는 마지막 10 라인을 나열하고 싶습니다. head -10 또는 tail -10을 시도했지만 횡설수설했습니다. 또한 두 파일이 유사한 지 아닌지 비교할 필요가 있습니다. 어떻게 파일을 압축 해제하지 않고 이것을 달성하기 위해?리눅스에서 압축 해제하지 않고 파일의 처음 또는 마지막 10 줄을 나열하는 방법

편집 : 비슷한 의미 (동일한 내용을 가짐).

+0

비슷한 의미입니까? BZ2는 블록 기반 형식이므로 전체를 읽지 않고 작은 덩어리의 파일 만 압축을 풀 수 있습니다. – ypnos

+0

두 개의 압축 파일을 비교할 때이 페이지에서 뭔가를 찾을 수 있습니다. 질문에 특별히 .zip 파일을 묻는 질문이 있지만 ... http://stackoverflow.com/questions/587442/is-there-a-safe -way-to-run-a-diff-on-two-zip-compressed-files – ajp15243

+0

파일의 압축을 풀어야합니다. 제 생각에 당신이 실제로 묻는 것은 "압축 해제 된 파일의 사본을 저장할 필요없이"라고 생각합니다. –

답변

0

일반 표준 bunzip2 명령으로는이 작업을 수행 할 수 없습니다. 그러나 맨 페이지에 따르면 bzip2는 900KB의 블록으로 작동하며 각 블록을 압축 해제 할 수있는 프로그램 인 bzip2recover을 언급합니다.

그 지식을 사용하면 원하는 파일에서 첫 번째와 마지막 900KB (또는 그 이상)를 잘라낸 다음 bzip2recover를 사용하여 압축을 풀 수 있습니다. bzip2 동안

+0

이 문제는 파일을 원래 압축하기 위해 주어진 인수에 따라 블록 크기가 원래 압축되지 않은 데이터의 최대 * 900KB까지입니다. 압축 된 파일 내의 위치에 해당하는 방식은 데이터에 매우 의존적이어서 예측하기가 어렵습니다. – twalberg

7

은 이론적으로는 은 당신이 압축을 해제 할 특정 블록을 찾을 수 있도록,이은 (복잡한 것, 블록 기반 압축 알고리즘 예를 들어, 당신이 궁극적으로 실제로 스팬을보고 싶어 마지막 10 줄 경우 2 개 이상의 압축 블록?).

즉각적인 질문에 답하기 위해 실제로 전체 파일의 압축을 풀 수 있으므로 낭비 적이기는하지만 그 파일을 아무 곳에 나 저장하지 않으므로 저장소로 실행되지 않습니다. 용량 문제 :

bzcat file.bz2 | head -10 
bzcat file.bz2 | tail -10 

배포가 bzcat이 (내 경험에 조금 이상한 일 것이다), bzcatbzip2 -d -c에 해당 포함하지 않습니다.

그러나 궁극적 인 목표는 서로 다른 레벨에서 압축되었을 수있는 두 개의 압축 파일을 비교하여 실제로 압축 된 파일을 직접 비교할 수 없다면이 작업을 수행 할 수 있습니다 (쉘로 bash으로 가정)) :

cmp <(bzcat file1.bz2) <(bzcat file2.bz2) 

이 두 파일의 압축을 풀고 이제까지 어디서든 압축을 푼 파일 중 하나를 저장하지 않고 비 압축 데이터를 바이트 단위로 비교합니다.

관련 문제