2014-01-07 3 views
33

로컬 호스트의 디렉토리와 원격 Linux 시스템의 디렉토리를 재귀 적으로 비교하려고합니다. 내가 다음 명령을 실행할 때, :ssh를 통해 디렉토리를 비교하는 방법

DIFF : ssh를 [email protected] :/홈/관리자 :

diff -r 'ssh [email protected]:/home/admin' /home/admin 

는 말을 작동하지 않는 그런 파일이나 디렉토리

재귀 적으로 디렉토리 내용을 비교하는 올바른 방법은 무엇입니까? 사전

+1

는 관련 : http://serverfault.com/questions/59140/how-do-diff-over-ssh – fedorqui

+1

이 링크 파일을 비교하는 방법에 대해 설명합니다. dir을 비교할 때 작동하지 않는다. –

답변

30

, 단지 디렉토리/파일 이름의 차이를 가져,이 시도 :

(참고 : 세부 사항을 위해, "SSH 로그인 암호가없는"설정 필요성 검토이 URL : http://www.linuxproblem.org/art_9.html)

diff <(ssh [email protected] ls -R /home/admin) <(ls -R /home/admin) 
+2

과 같은 IDE에서 마운트 된 디렉토리를 사용할 수 있습니다. ssh가 암호를 묻는 경우, 다음과 같이 암호를 출력하는 두 번째 작업자 < : diff (ssh [email protected] find/home/admin -printf ' "% 8s % p \ n"') <(찾기/home/admin -printf '% 8s % p \ n') 이 시스템 허가 된 사용만을위한 것입니다. [email protected] 암호 : 권한이 거부되었습니다. 다시 시도하십시오. [email protected] 암호 : 권한이 거부되었습니다. 다시 시도하십시오. [email protected] 암호 : 사용 권한이 거부되었습니다 (publickey, password). –

+0

SSH 세션에 대해 비 암호를 먼저 설정해야합니다. – BMW

+0

답을 업데이트했습니다.이 URL을 검토하십시오. http://www.linuxproblem.org/art_9.html – BMW

15

에서

덕분에 단지 "드라이 런"을 수행하고 어떻게 할 것인지를 알려주는 "-n"옵션과 "rsync를"사용해보십시오.

+3

'-c'는 날짜와 길이가 아닌 체크섬을보기 위해 rsync에게 알린다. – Mike

+3

'--delete'가 필요하다. 이 파일이 없으면 2 차 컴퓨터에는 있지만 1 차 컴퓨터에는없는 파일이 표시되지 않습니다. 드라이 런'-n' 옵션을 가지고 있는지 확인하십시오. – JellicleCat

+1

물론 여러분은 여러분의 재귀를 위해서'-r'이나'-a'가 필요합니다. 그리고 디렉토리 이름 뒤에 백 슬래쉬를 추가하는 것을 잊지 말아야합니다. (그렇다면 스타가 없습니다) 그렇지 않으면 어떻게 든'--delete'는 어떤 것도 반환하지 않습니다 삭제. 그래서 명령은'rsync -e 'ssh -p 22'-azvn -delete [email protected] :/home/admin// home/admin /'이 될 것입니다. – TNT

9

sshfs을 통해 원격 디렉토리를 마운트 한 다음 diff -r을 사용하여 원하는대로 두 디렉토리를 비교할 수 있습니다.

두 시스템 모두에서 유사한 find 명령을 실행하여 파일 트리 (예 : 파일 이름, 크기 및 날짜)를 인쇄 한 다음 diff을 사용하여 두 파일의 출력을 비교할 수 있습니다. 이것은 물론, 파일 내용을 비교하지 것이다 다음 ssh 호출에서의 printf 포맷 스트링의 인용

diff <(ssh host find /home/admin -printf '"%8s %P\n"') \ 
    <(find /home/admin -printf '%8s %P\n') 

공지 이중. 하나의 레이어는 ssh 릴레이에 의해 제거됩니다. 당신이 파일의 세부 사항은 diff 할 필요가있는 경우

+0

'find' 명령의 출력을'diff'를 통해 비교하기 전에'sort'하는 것이 유용 할 수 있습니다; 이 경우 경로를 출력에서 ​​첫 번째 요소로 사용합니다.'<(find/home/admin -printf "% p % s \ n"| sort) ' – Alfe

+1

% P보다 % P를 더 잘 사용할 수 있습니다. 각 서버의 다른 폴더에있는 diff 디렉토리 – reox

+0

감사합니다. @reox, 그에 따라 답변을 변경했습니다. 실제로, 나는 보통 이것을'(cd dir; find.-printf ...)'이 경우'% p' 또는'% P'가 사용 되더라도 아무런 차이가 없습니다. 여기 있습니다. – Alfe

관련 문제