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

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

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

다음을 사용하는 백업 유틸리티가 있습니다.재동기화. 소스와 백업 간의 정확한 차이점(파일 크기 및 마지막 변경 날짜 측면에서)을 알려주고 싶습니다.

다음과 같은 것 :

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

물론 도구는 이미 만들어져 있거나 Python 스크립트에 대한 아이디어일 수 있습니다.

정말 감사합니다!

우디

답변1

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

답변2

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

내가 원했던 것 :

  • 비교하려면동일한 파일 시스템그 자체로, 즉,스냅 사진,변화시키다,스냅 사진,비교하다.
  • 추가되거나 제거된 파일 목록은 내부 파일 변경 사항에 관심이 없습니다.

제가 한:

첫 번째 스냅샷( 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 '^(@@|\+\+\+|---)'

좋은 점은 이것이 거의 기본 시스템 바이너리를 사용한다는 것입니다. 콘텐츠를 기준으로 비교하는 작업은 파일 경로를 반영하는 매개변수와 그 뒤에 MD5를 find전달 하여 수행할 수 있습니다.-exec

답변3

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

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처럼 쉽게 find 및 exec 또는 find 및 xargs를 사용하여 수행할 수 있습니다. 그리고 또한 diff의 출력을 예쁘게 정리하여 "이 파일은 호스트1에 있지만 호스트2는 없습니다"와 같은 내용을 표시할 수 있지만 그 시점에서는 다른 사람들이 이야기하는 도구를 설치하는 것이 좋습니다.

답변4

diff -r실제로 꽤 잘 작동합니다. 차이점의 실제 내용이 아니라 파일이 다른지 알고 싶다면 다음을 수행하십시오.diff -qr

관련 정보