我使用 rsync(cygwin)在服务器和我的电脑之间传输文件。
Rsync 每 2 分钟运行一次,有时会传输一些文件,有时则不会。我需要执行一些操作,但前提是文件已从服务器传输到 PC。
我如何知道文件是否已被传输?
PS 我尝试使用 rsync 的退出代码,但无论文件是否传输,它都会返回 0。
答案1
rsync -rtv <source> <dest> | wc -l
如果结果大于 4,则会发生一些变化
答案2
rsync --stats
您可以使用选项--stats
或--info=stats2
最终使用 grep 进行过滤。
rsync -avr ORIG DEST --stats | grep "Number of created files"
数量创建文件:14
您可以从手册中rsync
阅读
--统计
这告诉 rsync 打印一组详细的统计数据在文件传输过程中,您可以了解 rsync 的增量传输算法对您的数据的有效性。如果与 0 或 1 个 -v 选项结合使用,则此选项相当于 --info=stats2;如果与 2 个或更多 -v 选项结合使用,则此选项相当于 --info=stats3。
进一步说明:
我建议你使用日志文件作为建议的作者:MariusMatutiae 如果你有好奇心查看已传输的文件。
对于grep
过滤器,您可以选择您感兴趣的每行:
传输了一些文件的输出示例:
文件数量:15(注册:14,目录:1)
创建文件数:14(常规:14)
已删除文件数:0
传输的常规文件数量:14
文件总大小:280,860 字节
传输的文件总大小:280,860 字节
文字数据:280,860 字节
匹配数据:0 字节
文件列表大小:0
文件列表生成时间:0.001 秒
文件列表传输时间:0.000 秒
发送的总字节数:281,842
接收的总字节数:285相同的命令,但没有传输文件:
文件数量:15(注册:14,目录:1)
创建文件数:0
已删除文件数:0
传输的常规文件数:0
文件总大小:280,860 字节
传输的文件总大小:0 字节
文字数据:0 字节
匹配数据:0 字节
文件列表大小:0
文件列表生成时间:0.001 秒
文件列表传输时间:0.000 秒
发送的总字节数:357
接收的总字节数:12
答案3
我使用选项
rsync .... --log-file=/path/to/log/file
这添加到日志文件,这样您就可以找出是否已经传输了任何内容,如果是的话,那么具体传输了什么,甚至比备份发生的时间还要晚。
答案4
这是一个脆弱的解决方案,但我真的不喜欢在子 shell 中运行 rsync,也不喜欢捕获它的输出,因为这两者都使我过去的调试变得困难。
所以当我需要这个时,我会比较调用ls -la "$target"
rsync 之前和之后的输出。