rsync 로그 파일에 테스트 실행 시 일반 파일에 대한 업데이트가 포함되지 않는 이유는 무엇입니까?

rsync 로그 파일에 테스트 실행 시 일반 파일에 대한 업데이트가 포함되지 않는 이유는 무엇입니까?

테스트 실행 모드에서는 로그 파일에 변경/업데이트된 일반 파일이 포함되지 않으며 삭제된 내용도 전혀 포함되지 않습니다. 여기에는 변경되고 생성된 디렉터리만 포함됩니다. 그러나 테스트 실행 없이 실행하면 로그 파일에 다양한 변경 사항이 포함됩니다.

작은 예: 명령을 실행할 때

rsync -a --delete-delay --progress --itemize-changes --stats --dry-run --log-file="/tmp/rsync-dry.txt" /tmp/mySource/ /tmp/myDest/

로그 파일은 다음과 같습니다(3개 항목, 모두 디렉터리와 관련됨).

2015/08/26 17:18:04 [5812] building file list
2015/08/26 17:18:04 [5812] .d..t...... ./
2015/08/26 17:18:04 [5812] .d..t...... sub1/
2015/08/26 17:18:04 [5812] cd+++++++++ sub2/
2015/08/26 17:18:04 [5812] Number of files: 11 (reg: 8, dir: 3)
2015/08/26 17:18:04 [5812] Number of created files: 5 (reg: 4, dir: 1)
2015/08/26 17:18:04 [5812] Number of deleted files: 4 (reg: 3, dir: 1)
2015/08/26 17:18:04 [5812] Number of regular files transferred: 6
...

드라이런이 없습니다.

rsync -a --delete-delay --progress --itemize-changes --stats --log-file="/tmp/rsync-wet.txt" /tmp/mySource/ /tmp/myDest/

로그 파일은 다음과 같습니다(13개 항목).

2015/08/26 17:19:44 [5837] building file list
2015/08/26 17:19:44 [5837] .d..t...... ./
2015/08/26 17:19:44 [5837] >f.st...... Bbb.txt
2015/08/26 17:19:44 [5837] >f+++++++++ Ccc.txt
2015/08/26 17:19:44 [5837] .d..t...... sub1/
2015/08/26 17:19:44 [5837] >f.st...... sub1/Fff.txt
2015/08/26 17:19:44 [5837] >f+++++++++ sub1/Ggg.txt
2015/08/26 17:19:44 [5837] cd+++++++++ sub2/
2015/08/26 17:19:44 [5837] >f+++++++++ sub2/Iii.txt
2015/08/26 17:19:44 [5837] >f+++++++++ sub2/Jjj.txt
2015/08/26 17:19:44 [5837] *deleting   sub3/Kkk.txt
2015/08/26 17:19:44 [5837] *deleting   sub3/
2015/08/26 17:19:44 [5837] *deleting   Ddd.txt
2015/08/26 17:19:44 [5837] *deleting   sub1/Hhh.txt
2015/08/26 17:19:44 [5837] Number of files: 11 (reg: 8, dir: 3)
2015/08/26 17:19:44 [5837] Number of created files: 5 (reg: 4, dir: 1)
2015/08/26 17:19:44 [5837] Number of deleted files: 4 (reg: 3, dir: 1)
2015/08/26 17:19:44 [5837] Number of regular files transferred: 6
...

이는 rsync가 수행하는 작업을 정확하게 반영합니다.

--dry-run 유무에 관계없이 rsync의 출력이 동일해야 한다고 믿기 때문에 혼란스럽습니다. (그렇지 않으면 테스트 실행이 무슨 소용이 있습니까?) 문제는 로그 파일에만 관련됩니다. --dry-run 유무에 관계없이 터미널 출력은 항상 완료됩니다.

-a 대신 --rtgopl 또는 -rtgo, -i 대신 -v와 같은 다른 옵션을 시도했습니다. 깃발을 다시 배열해 보았습니다. -c 또는 --inplace와 같은 옵션을 추가해 보았습니다. 도움이 안돼. 또한 대상이 다른 로컬 경로(예에서와 같이)인지, USB 드라이브인지, SSH를 통한 원격 대상인지는 중요하지 않습니다. 내가 뭘 잘못했나요? 아니면 rsync가 이렇게 작동해야 합니까? (저는 Ubuntu 14.04, rsync 버전 3.1.0을 사용하고 있습니다.)

답변1

마지막으로 위의 rsync 동작이 버그가 아니라 기능일 수 있다는 힌트를 발견했습니다.

현재 코드는 데몬 로그를 기록하는 것과 동일한 방식으로 --log-file을 기록합니다. 즉, 실제 전송이 아닌 전송은 기록하지 않습니다.

[https://bugzilla.samba.org/show_bug.cgi?id=5792#c2]

테스트 실행 모드에서 실제 포함된 로그 파일을 가져오려면모두업데이트, 생성 및 삭제. 해결 방법으로 화면 출력을 파일로 리디렉션할 수 있습니다.

rsync -a --delete-delay --progress --itemize-changes --stats --out-format='%t %p %i %n %M %l' --dry-run /tmp/mySource/ /tmp/myDest/  | tee /tmp/rsync-dry.txt

예제에서는 이 옵션을 사용하여 --out-format='%t %p %i %n %M %l'이 옵션이 출력 형식을 지정하는 방식과 대략적으로 출력 형식을 지정합니다 --log-file.

관련 정보