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

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

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

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

어떤 아이디어?



답변

한 가지 좋은 방법은 트리의 모든 파일에서 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를 사용하여 원하는 경우 명령을 원격으로 실행할 수 있습니다.


답변

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

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

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


답변

디렉토리에있는 개별 파일에 대한 개별 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

답변

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

rsync -rvnac --delete /local/directory/ user@remote:/remote/directory/