2013-10-16 3 views
17

저는 유닉스에 처음 왔으니 도움이 필요합니다. 두 개의 다른 서버에 두 개의 디렉토리가 있습니다. 두 디렉토리 모두 동일한 파일을 포함합니다. 이제 모든 파일이 두 디렉토리에서 동기화되어 있는지 확인하고 싶습니다. 파일이 동기화되지 않은 경우 해당 파일의 이름 만 표시하려고합니다. 디렉토리가 같은 서버에있을 때 할 수 있습니다. 디렉토리가 두 개의 다른 서버에있을 때이를 수행하는 방법을 파악할 수 없습니다.유닉스를 사용하는 원격 서버의 두 디렉토리의 내용을 비교하십시오.

eg: 
server1 /abc/home/sample1/ 
server2 /abc/home/sample2/ 

여기서는 동기화되지 않을 때 표시 할 파일 이름 만 원합니다. 사전

+0

일반적인 시스템에 두 개의 서버를 탑재하고 평상시와 같은 방식으로 *를 비교하십시오. – devnull

+0

diff, rsync 또는 vimdiff를 사용하여이 문제를 해결할 수 없습니까? – DSD

답변

44

에서

덕분에 당신은 파일을 동기화하면 실제로 동기화를 수행하지 않고, 알아 -n 플래그와 rsync를 사용할 수 있습니다./ABC/가정/sample1을 /과 서버 2 :

rsync -n -avrc /abc/home/sample1/* server2:/abc/home/sample2/ 

이 서버 1 사이의 차이 (-r 플래그와 순환) 모든 파일의 이름을 인쇄합니다 : 서버 1에서 예를 들어

/ABC/홈 서버 1/sample2를/

+0

감사합니다. sssh와 rsync를 사용하면 잘 작동합니다. – DSD

+1

좋은 답변입니다. '-c'는 체크섬에 의해 특별히 비교되는 것처럼 매우 중요합니다. 나는 그것없이 가양 성을 얻고 있었다. '-a'는'--r'을 의미합니다 ('--files-from'를 쓰지 않는다면) – isuldor

+3

그냥 요약 해주세요. 'rsync -avcn folder1/folder2 /'를 원한다. – mniess

4

:

cd /abc/home/sample1/ && diff --side-by-side --suppress-common-lines <(find . -type f|xargs stat --printf "%s\t%n\n"|sort -n) <(ssh server2 "cd /abc/home/sample2/ && find . -type f|xargs stat --printf \"%s\t%n\n\"|sort -n") 

이 꽤 빨리하지만 파일 크기 대신 내용의 해시를 사용하기 때문에 rsync와 같은 아마 정확하지 않습니다. 또한, server2가 server1보다 더 많은 파일을 가지고 있다면, kielni의 응답으로부터의 rsync는 아무것도 표시하지 않을 것입니다. 대신 이것을 시도하십시오 :

rsync -n -avr --size-only --delete /abc/home/sample1/ server2:/abc/home/sample2/ 
+0

당신의 rsync 명령이 유일한 대답이기 때문에 받아 들여진 대답이어야합니다. –

+0

파일이 서버 2에는 있지만 서버 1에는 존재하지 않는 경우 표시하려면 --delete가 필요합니다. – tsukimi

0

두 서버 사이에 연결이없는 시나리오에서는 "tree"명령을 사용하여 파일의 디렉토리 구조를 얻은 다음 두 파일을 비교하십시오.