Linux에서 두 개의 개별 디렉토리가 정확히 동일한 내용을 가지고 있는지 어떻게 쉽게 확인할 수 있습니까?


8

CentOS 5.x

Mq 질문은 이것 과 비슷해 보였지만 확실하지 않습니다 ...

동일한 내용을 가져야하는 디렉토리와 하위 디렉토리가있는 두 개의 서버 (서로 완전히 분리되어 있음)가 있습니다.

예를 들어 디렉토리 레이아웃은 다음과 같습니다.

서버 A-

/opt/foo/foob/1092380298309128301283/123.txt
/opt/foo/foob/5094380298309128301283/456.txt
/opt/foo/foob/5092380298309128301283/789.txt
/opt/foo/foob/1592380298309128301283/abc.txt

서버 B-

/opt/foo/foob/1092380298309128301283/123.txt
/opt/foo/foob/5094380298309128301283/456.txt
/opt/foo/foob/5092380298309128301283/789.txt
/opt/foo/foob/1592380298309128301283/abc.txt

이상적으로는 재귀 검사를 수행하고 모든 것이 일치하는지 확인하는 방법을 원합니다.

또한 타사 도구 사용을 피하고 싶습니다.

어떤 아이디어?


두 디렉토리를 비교하고 싶습니까? 아니면 실제로 하나의 디렉토리를 다른 디렉토리와 복제 하시겠습니까?
Scott Pack

@ScottPack 좋은 질문입니다. 비교하고 싶지만 변경하지는 않습니다. 다른 것은 디렉토리의 복제를 처리하고 있습니다. 나는 그것이 일을하고 있는지 확인하고 싶습니다.
Mike B

1
이미이 질문에 태그를 rsync했습니까? 그래서 ... 음, rsync( -n옵션으로) 사용합니까?
faker

@faker rsync가 옵션 일 수 있다고 생각했지만이 사용 사례에 더 나은, 쉬운 또는 더 구체적인 것이 있는지 확실하지 않았습니다. 파일 이름, 날짜, 크기 및 상대 위치가 일치한다는 것을 알아야합니다.
Mike B

시간 및 크기 일치의 --checksum 옵션을 참조하면 rsync에이 파일 내용을 확인하지 않습니다 경우이 걱정 당신
스튜

답변:


9

한 가지 좋은 방법은 트리의 모든 파일에서 md5sum을 사용하는 것입니다.

server1에서 이것을 실행하십시오.

find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum > report_from_server1.tx

server2에서 이것을 실행하십시오.

find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum > report_from_server2.tx

그런 다음 두 파일 (diff 사용) 또는 원하는 것을 비교하십시오.

당신이 찾고있는 라인을 따라 있습니까?

물론 SSH를 사용하여 원하는 경우 명령을 원격으로 실행할 수 있습니다.


고마워 캠든 예, 이것이 내가 찾던 것이라고 생각합니다. 테스트하고 제대로 작동하는지 확인하겠습니다.
Mike B

2
또는 md5sum md5sums
dmourati

우수-맞습니다. 어떤 파일이 변경되는지 알지 못하는 경우 결과 파일을 md5sum하고 두 합계를 비교할 수 있습니다.
Camden S.

당신은 그냥 할 것, 또한, 당신은 아마 이미 알고 있지만, SSH을 통해 원격으로 명령을 실행ssh user@servera 'find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum'
캠든 S.

1
MikeB는 재귀 긴 목록을 실행하고 md5sum에 전달하면 디렉토리 내용의 md5sum을 얻게되며 파일의 내용은 제외됩니다. 한쪽 끝에있는 파일 시스템의 inode 크기가 다르면 파일 크기에도 큰 차이가 생길 수 있습니다. @CamdenS에서 처음 제안한 내용에 대해 md5sum 수행 더 나은.
nearora

7

당신이 반드시 신경 쓰지 않으면 어떤 일이 변경되었습니다 그냥, 변경, rsync를 아직도 정말 좋다. 이 명령이 'servera'에서 실행된다고 가정하면이 명령을 실행하고 출력을 확인하십시오.

rsync -avcn /opt/foo/ serverb:/opt/foo

결과 목록은 실제로 동기화 프로세스를 실행 한 경우 수정 된 파일입니다. 타임 스탬프 만 변경된 경우에도 파일은 목록에 표시되지만 내용은 동일하게 유지됩니다. -n플래그 를 추가 했으므로 실제로는 아무런 작업도 수행되지 않으며보고 만됩니다.


감사. 두 상자가 서로 완전히 분리되어 있으면 어떻게합니까? 출력을 사용하여 비교하려면 어떻게해야합니까?
Mike B

그는 자신의 서버 중 하나 떨어져 실행해야합니다, 그래서 rsync를가 원격으로 소스 및 대상을 지원하지 않습니다
사기꾼

@ faker : 인정해야합니다. 전에 시도하지 마십시오. 당신이 말했듯이, 설명하기가 쉽습니다.
Scott Pack

+1. 의 영리한 사용 rsync. 그러나 완전히 정확하려면 rsync양방향으로 실행해야합니다 . 즉, 이것을 추가해야합니다.rsync -avcn serverb:/opt/foo/ /opt/foo
Steven

5

디렉토리에있는 개별 파일에 대한 개별 MD5 해시를 계산하는 빠른 스크립트를 함께 해킹 할 수 있지만 디렉토리에있는 md5deep모든 파일의 해시를 재귀 적으로 계산 한 다음 출력 하는 도구를 사용하는 것이 더 좋습니다. 파일로. 그런 다음 다른 디렉토리에서 첫 번째 해시 파일을 입력으로 사용하고 두 디렉토리간에 다른 파일 목록을 제공 할 수 있습니다.

따라서 예를 들어, 다음 프로세스를 따르십시오.

  1. 서버 A에서 필요한 디렉토리의 해시를 계산하십시오.

    md5deep -r /opt/foo/ > file_hashes.txt

  2. file_hashes.txt비교를 위해 파일 파일을 서버 B에 복사하십시오 .

  3. 서버 B에서 필요한 디렉토리의 해시를 계산하지만 -x플래그를 사용하여 다른 파일 만 표시 하여 서버 A의 파일 해시를 입력 파일로 가져옵니다 .

    md5deep -x file_hashes.txt -r /opt/foo/

md5deep 툴 세트는 대부분의 배포판의 패키지 관리 시스템의 일부를 구성하며 MD5뿐만 아니라 다양한 해싱 알고리즘을 지원한다는 점이 가장 좋습니다. 따라서 충돌에 대한 편집증이라면 여러 가지 대안을 사용할 수 있습니다. 다음 도구는 md5deep의 일부를 구성하며 각 도구는 대체 해싱 알고리즘을 제공합니다.

   md5deep - Compute and compare MD5 message digests
   sha1deep - Compute and compare SHA-1 message digests
   sha256deep - Compute and compare SHA-256 message digests
   tigerdeep - Compute and compare Tiger message digests
   whirlpooldeep - Compute and compare Whirlpool message digests

0

나는 @ scott-pack과 비슷한 기술을 사용했다. 이것은 양방향 diffing을 줄 것이다. "삭제"로 시작하는 모든 것은 원격 서버에 있지만 로컬 서버에는없는 파일입니다. 파일 내용없이 나열된 모든 디렉토리는 변경되지 않은 디렉토리입니다. 나열된 모든 파일은 원격 서버에 없거나 로컬 버전이 "최신"인 파일입니다.

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