Linux에서 큰 파일을 다른 방법으로 나누는 방법


31

나는군요 diff: memory exhausted에 CentOS 5와 4GB의 RAM을 가진 리눅스 박스에 대체로 비슷 사랑하는 두 27기가바이트 파일을 시도 할 때 오류가 발생했습니다. 이것은 알려진 문제입니다.

그러한 필수 유틸리티에 대한 대안이있을 것으로 기대하지만 찾을 수는 없습니다. 솔루션이 필요한 정보를 저장하기 위해 메모리 대신 임시 파일을 사용해야한다고 생각합니다.

  • 나는 rdiffand 을 사용하려고 시도했지만 xdelta패치와 같이 두 파일 간의 변경 사항을 표시하는 것이 좋으며 두 파일의 차이점을 검사하는 데 유용하지 않습니다.
  • VBinDiff를 시도 했지만 이진 파일을 비교하는 데 더 적합한 시각적 도구입니다. regular과 같은 차이점을 STDOUT에 파이프 할 수있는 것이 필요합니다 diff.
  • vimdiff더 작은 파일에서만 작동하는 것과 같은 다른 많은 유틸리티가 있습니다.
  • 솔라리스에 대해서도 읽었 bdiff지만 Linux 용 포트를 찾을 수 없습니다.

파일을 작은 조각으로 나누는 것 외에 다른 아이디어가 있습니까? 나는이 파일 중 40 개를 가지고 있으므로 파일을 끊는 작업을 피하려고합니다.


어떤 버전의 xdelta를 사용해 보셨습니까? xdelta3 또는 xdelta1?
— nmuntz

버전 1.1.4입니다. xdelta3는 다른 기능을 제공합니까? 방금 온라인 문서를 확인했는데 여전히 "델타"를 제공하는 것으로 보입니다.
— Tom B


이 답변도 참조하십시오 : unix.stackexchange.com/a/77259/27186
— unhammer

답변:


12

cmp바이트 단위로 작업을 수행하므로 메모리가 부족하지 않을 것입니다 (두 개의 7GB 파일에서 테스트 한 것). "파일 X 와 Y 가 바이트마다 다른 목록보다 더 자세한 정보를 찾고있을 수 있습니다 x , 라인 y ". 파일의 유사성이 오프셋 된 경우 (예를 들어, 파일 Y 는 동일한 텍스트 블록을 갖지만 동일한 위치에 있지는 않음) 오프셋을 cmp; 작은 스크립트와의 재 동기화 비교로 바꿀 수 있습니다.

따로 : 두 개의 디렉토리 구조 (매우 큰 파일 포함)가 동일하다는 것을 확인하는 방법을 찾을 때 다른 사람이 여기에 착륙하는 경우 diff --recursive --brief(또는 diff -r -q짧거나 어쩌면 diff -rq) 메모리가 부족하지 않습니다.


-q가 여기에 핵심이라고 생각합니다. 어쨌든 전체 파일 (또는 적어도 전체 라인)을 메모리에 저장하기 위해 diff가 필요하지 않을 수도 있습니다.
— rogerdpack

7

이 링크를 찾았습니다

diff -H가 도움이 될 수도 있고 파일을 RAM에로드하지 않는 textproc / 2bsd-diff 포트를 설치하여 큰 파일에서 더 쉽게 작업 할 수 있습니다.

이 두 가지 옵션을 시도했는지 또는 그들이 당신을 위해 효과가 있는지 확실하지 않습니다. 행운을 빕니다.


1
이것은 누구에게나 도움이됩니까? 나를 위해, 같은 실패 ...
— rogerdpack

12
궁금한 사람 diff -H은 : 에 대한 문서화되지 않고 더 이상 사용되지 않는 별칭입니다 diff --speed-large-files.
— a3nm

1
이 답변은 도움이되지 않습니다. 이것은 리눅스 질문이며 2bsd-diff를 설치하려면 먼저 포팅해야합니다. 소스 를 찾은 후 . 그리고 그것을 패치했다 . 가능하지만 실행 가능한 솔루션은 아닙니다.
— nyov

1

몇 바이트 값을 제외하고 파일이 동일한 (길이가 같은) 경우 다음과 같은 스크립트를 사용할 수 있습니다 ( w16 진 덤프에 대한 줄당 바이트 수, 표시 너비에 맞게 조정).

w=12;
while read -ru7 x && read -ru8 y;
do
  [ ".$x" = ".$y" ] || echo "$x | $y";
done 7< <(od -vw$w -tx1z FILE1) 8< <(od -vw$w -tx1z FILE2) > DIFF-FILE1-FILE2 &

less DIFF-FILE1-FILE2

빠르지는 않지만 일을합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.