답변:
rsync -aHAX --delete
기억하고 -n
및 -i
플래그 를 추가 하기 전에이 작업을 수행했습니다 .
이것은 약간 반 직관적이지만 나와 함께 견뎌야합니다. 기본 rsync
명령은 두 디렉토리를 함께 동기화해야하는 것입니다. 그러나 -n -i
동기화하지 않고 (즉, 드라이 런을 수행) 수행 한 작업과 이유를 인쇄하십시오. 파싱하는 것은 환상적이지 않지만 파일 이름을 쉽게 가져 와서 파이프로 만들 수 있습니다 ls
.
이것은 mtimes, 날짜 등을 비롯하여 모든 장치 노드, 소켓, 명명 된 파이프 등을 따르지 않는 모든 것을 살펴볼 것입니다. 위의 명령 행은 ACL 및 확장 된 속성도 살펴 봅니다. 옵션을로 변경하여 rsync
장치를 하나의 장치로 제한하고 -x
소프트 및 하드 링크 동작 등 을 변경하여보고있는 것을 조정할 수 있습니다 .
야노스는 이미 무엇을해야하는지 말했다 :
find /a -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >a
find /b -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >b
diff -u a b
그리고 man 1 stat
말합니다 :
%A access rights in human readable form
%C SELinux security context string
%F file type
%g group ID of owner
%u user ID of owner
%s total size, in bytes
%Y time of last modification, seconds since Epoch
%n file name
파일 내용을 비교하려면 다음을 사용할 수 있습니다.
find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35-
as described here: http://www.commandlinefu.com/commands/view/3555/find-duplicate-files-based-on-size-first-then-md5-hash
find
에는 GNU 의 기능이 stat
내장되어 있으며 수십 년 전에 GNU 통계보다 앞서 있습니다. 또한 diffing 전에 출력을 정렬하고 싶을 것입니다. 그리고 당신은 필요한 (cd /a && find . ...)
다른 모든 라인 때문에의 다릅니다 /a
대 /b
파일 경로에.
다음은 확장 속성을 비교하기 위해 작성한 빠른 bash 스크립트입니다. 모든 파일 이름을 인쇄 한 다음 속성의 차이점을 인쇄합니다.
cd a
export relpath=[path/to/b/from/a]
for filename in $(find .);
do
echo $filename;
diff <(xattr -l $filename) <(xattr -l $relpath/$filename);
done
다른 답변에서 차용하여 다음 stat
대신에 사용하도록 수정할 수 있습니다 xattr
.
for filename in $(find .);
do
echo $filename;
diff <(stat -c '%A %C %F %g %u %s %Y' $filename) <(stat -c '%A %C %F %g %u %s %Y' $relpath/$filename);
done