我如何检查 rsync 是否传输了文件?

我如何检查 rsync 是否传输了文件?

我使用 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 之前和之后的输出。

相关内容