디렉토리 구조를 비교하는 가장 좋은 방법은 무엇입니까?
다음을 사용하는 백업 유틸리티가 있습니다.재동기화. 소스와 백업 간의 정확한 차이점(파일 크기 및 마지막 변경 날짜 측면에서)을 알려주고 싶습니다.
다음과 같은 것 :
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