Unix 명령줄 컨텍스트에서 두 개의 매우 큰 파일(각각 약 1TB)을 가급적이면 진행 표시기를 사용하여 비교하고 싶습니다.
diff
시도해 보았는데 cmp
둘 다 시스템(macOS Mojave)을 충돌시키고 진행률 표시줄을 표시합니다.
이렇게 대용량 파일을 비교하는 가장 좋은 방법은 무엇입니까?
추가 세부 사항:
나는 단지 그들이 같은지 확인하고 싶습니다.
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에 할당할 수 있습니다.