대용량 파일과 진행정보를 비교하는 방법

대용량 파일과 진행정보를 비교하는 방법

Unix 명령줄 컨텍스트에서 두 개의 매우 큰 파일(각각 약 1TB)을 가급적이면 진행 표시기를 사용하여 비교하고 싶습니다.

diff시도해 보았는데 cmp둘 다 시스템(macOS Mojave)을 충돌시키고 진행률 표시줄을 표시합니다.

이렇게 대용량 파일을 비교하는 가장 좋은 방법은 무엇입니까?

추가 세부 사항:

  1. 나는 단지 그들이 같은지 확인하고 싶습니다.

  2. cmp시스템이 자체적으로 재부팅되는 방식으로 시스템을 충돌시킵니다. :-( 어쩌면 시스템의 메모리가 부족할까요?

답변1

동일하거나 다르다는 사실에 대한 정보를 얻으려면 해시를 사용하는 한 가지 가능한 방법이 있습니다. 다음과 같은 명령은 sha1파일의 해시를 제공합니다 .

shasum file1 file2

예상 결과는 다음과 유사합니다.

ddfdb3a7fc6fc7ca714c9e2930fa685136e90448 file1
ddfdb3a7fc6fc7ca714c9e2930fa685136e90448 file2

답변2

pv이를 진행률 표시기 로 사용 하고 shasum함수에 파이프하여 해시가 동일한지 확인할 수 있습니다.

pv file1 | shasum
1.08MiB 0:00:00 [57.5MiB/s] [====================================>] 100%            
303462e848ecbec5f8ab12718fa6239713eda1c6  -

pv file2 | shasum
1.08MiB 0:00:00 [57.5MiB/s] [====================================>] 100%            
303462e848ecbec5f8ab12718fa6239713eda1c6  -

답변3

각 파일에서 몇 GB를 제거하고 타이밍을 맞추고 적절하게 크기를 조정하여 총 시간을 추정할 수 있습니다. 또한 진행률 표시줄은 바이트 수를 계산해야 하며 이로 인해 시간이 50%까지 연장될 수 있습니다.

실제로 루프를 사용하여 파일을 100개 부분으로 분할하고(dd 또는 파이프와 함께 head -c + tail -c 사용) 즐겨 사용하는 비교 도구를 사용하고 각 부분에 대해 보고할 수 있습니다.

이점:

(a) 1% 간격으로 진행 보고서를 제공합니다.

(b) 초기에 차이가 있으면 더 일찍 답변을 얻을 수 있으며 파일의 나머지 부분을 확인하지 않고 루프를 종료할 수 있습니다.

(c) 10GB 파일을 비교하면 시스템이 재부팅되지 않을 수 있습니다.

(d) 파일의 알려진 영역에 대한 보다 자세한 분석(분할 및 정복)을 수행하도록 이를 조정할 수 있습니다.

(e) 주소 범위의 일부를 여러 CPU에 할당할 수 있습니다.

관련 정보