전체 디렉토리 구조를 비교하는 가장 좋은 방법은 무엇입니까?


29

디렉토리 구조를 비교하는 가장 좋은 방법은 무엇입니까?

rsync 를 사용하는 백업 유틸리티가 있습니다. 원본과 백업의 정확한 차이점 (파일 크기 및 마지막으로 변경된 날짜)을 말하고 싶습니다.

다음과 같은 것 :

Local file                   Remote file                         Compare
/home/udi/1.txt (date)(size)   /home/udi/1.txt (date)(size)     EQUAL
/home/udi/2.txt (date)(size)   /home/udi/2.txt (date)(size)     DIFFERENT

물론 도구는 기성품이거나 파이썬 스크립트에 대한 아이디어 일 수 있습니다.

많은 감사합니다!

우디

답변:


18

당신이 찾고있는 도구는 rdiff 입니다. rsync와 diff를 결합하는 것과 같이 작동합니다. 비교하거나 배포 할 수있는 패치 파일을 만듭니다.


9

어떤 사람들은 여러 가지 이유로 파일 시스템을 비교하기를 원하므로 여기에 내가 원하는 것과 내가 한 방법을 쓰겠습니다.

나는 원했다 :

  • 같은 파일 시스템 을 자체와 비교하려면 ( 즉, snapshot ) , snapshot , compare를 변경 하십시오 .
  • 추가 또는 제거 된 파일 목록은 내부 파일 변경에 신경 쓰지 않았습니다.

제가 한:

첫 번째 스냅 샷 ( before.sh스크립트) :

find / -xdev | sort > fs-before.txt

두 번째 스냅 샷 ( after.sh스크립트) :

find / -xdev | sort > fs-after.txt

그것들을 비교하려면 ( diff.sh스크립트) :

diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'

좋은 부분은 기본 시스템 바이너리를 거의 사용한다는 것입니다. 내용을 기준으로 비교 하면 파일 경로를 에코 find하는 -exec매개 변수와 그 후에 MD5를 전달 하여 수행 할 수 있습니다 .


8

다른 도구를 설치하고 싶지 않다면 ...

for host in host1 host2
do
  ssh $host ' 
  cd /dir &&
  find . |
  while
    read line
  do
    ls -l "$line"
  done ' | sort  > /tmp/temp.$host.$$
done
diff /tmp/temp.*.$$ | less
echo "don't forget to clean up the temp files!"

그리고 예, for 루프 에서처럼 find 및 exec 또는 find 및 xargs로 수행 할 수 있습니다. 또한 diff의 출력을 예쁘게 만들 수 있으므로 "이 파일은 host1에 있지만 host2에는 없습니다"또는 그와 같은 것들이 있지만 그 시점에서 다른 사람들이 이야기하는 도구를 설치할 수도 있습니다 ...


5

디렉토리 구조를 비교하기 위해 과거에는 dirdiff 를 사용 했습니다 . 로컬 디렉토리에서만 작동하므로 sshfs다른 디렉토리 를 마운트해야합니다.

좋은 점은 파일이 같거나 새 파일이거나 더 오래된 파일을 시각적으로 볼 수 있다는 것입니다. 그리고 최대 5 개의 디렉토리를 지원합니다. 차이점을보고 파일을 서로 복사 할 수도 있습니다.


4

rsync 매뉴얼 페이지에서 :

-n, --dry-run
This  makes rsync perform a trial run that doesn’t make any changes (and produces mostly
the same output as a real run).  It is most commonly used in combination  with  the  -v,
--verbose  and/or -i, --itemize-changes options to see what an rsync command is going to
do before one actually runs it.

도움이 될 수 있습니다.


고마워,하지만 내 문제를 해결하지 못합니다 (실제로 차이점을 말할 diff를 찾고 있습니다).
Adam Matan

4

diff -r실제로 아주 잘 작동합니다. 차이점의 실제 내용이 아니라 파일이 다른지 알고 싶다면diff -qr


1
-r재귀를 의미하며 원격 호스트에 연결되지 않습니다!
마이클 햄튼

3

나는 그것을 위해 Meld를 ​​사용할 것입니다.


GUI 솔루션을 원한다면 Meld가 실제로 잘 작동합니다.
Drew Noakes

2

Windows에서 이미 언급 한 도구 외에도 Total Commander 또는 WinSCP를 사용할 수 있으며 디렉토리를 비교 (및 동기화) 할 수있는 매우 편리한 기능이 있습니다.


0

나는 실제로 새로운 것을 설치하고 싶지 않았으므로 솔루션은 약간 거칠지 만 빠르고 효과적입니다.

모든 파일이 복사되었으며 파일 모드, 소유권 및 SELinux 보안 컨텍스트가 그대로 유지되는 것을 비교하고 싶었습니다.

그래서 나는 달렸다.

rsync -aX /orig /copy/

다음과 같이 비교하십시오.

cd /orig && ls -lZR > /tmp/diff_orig
cd /copy && ls -lZR > /tmp/diff_copy
vimdiff /tmp/diff_*

두 파일의 내용이 모두 축소되어 있으면 동일합니다. 그렇지 않으면 diff가 표시됩니다.

ls확인해야 할 속성을 반영하도록의 매개 변수를 업데이트 하십시오. YMMV

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