在试运行模式下,日志文件不包含更改/更新的常规文件,也根本没有删除。它只包含更改和创建的目录。然而,在没有试运行的情况下执行时,日志文件确实包含各种更改。
一个小例子:运行命令时
rsync -a --delete-delay --progress --itemize-changes --stats --dry-run --log-file="/tmp/rsync-dry.txt" /tmp/mySource/ /tmp/myDest/
Run Code Online (Sandbox Code Playgroud)
日志文件看起来像这样(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
...
Run Code Online (Sandbox Code Playgroud)
没有试运行,即
rsync -a --delete-delay --progress --itemize-changes --stats --log-file="/tmp/rsync-wet.txt" /tmp/mySource/ /tmp/myDest/
Run Code Online (Sandbox Code Playgroud)
日志文件如下所示(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
...
Run Code Online (Sandbox Code Playgroud)
这准确地反映了 rsync 正在做什么。
我很困惑,因为我认为带和不带 --dry-run 的 rsync 的输出应该是一样的。(否则,dry-run 有什么好处?)该问题仅涉及日志文件。不管有没有 --dry-run 终端输出总是完整的。
我尝试了不同的选项,例如--rtgopl 或-rtgo 代替-a,-v 代替-i。我尝试重新排列标志。我尝试添加诸如 -c 或 --inplace 之类的选项。没有帮助。目标是另一个本地路径(如示例中所示)、USB 驱动器还是通过 ssh 的远程目标也无关紧要。我做错了什么?或者 rsync 应该像这样工作吗?(我使用的是 Ubuntu 14.04,rsync 版本 3.1.0。)
最后,我发现一个提示,上面描述的 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
Run Code Online (Sandbox Code Playgroud)
在示例中,我使用该选项--out-format='%t %p %i %n %M %l'
大致按照该选项格式化输出的方式来格式化输出--log-file
。
归档时间: |
|
查看次数: |
3285 次 |
最近记录: |