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


2

我使用rsync(cygwin)在服务器和PC之间传输文件。

Rsync每2分钟运行一次,有时有一些文件要传输,有时没有。我需要执行一些操作,但前提是文件是从服务器传输到PC的。

我如何知道文件是否已传输?

PS我尝试使用rsync的退出代码,但是在文件传输时和不传输时都返回0。

Answers:


5
rsync -rtv <source> <dest> | wc -l

如果结果超过4,则发生某些变化


谢谢,效果很好:)您能解释一下4的意思吗?
temur_p '16

wc -l计算行数。带选项的全新运行-v在输出中有4行。任何更改都超过4
matzeri '16

3

我使用该选项

 rsync ....  --log-file=/path/to/log/file

会添加到日志文件中,因此您可以找出是否已经转移了所有内容,如果有的话,确切地知道了什么,甚至比进行备份时还晚。


是的,我已经使用了--log-file,如果我需要将文件名传递给脚本怎么办?猜猜我必须使用awk或sed从日志文件中提取它们,这对我来说似乎有点棘手)
temur_p

1
@temur_p Awk and sed tricky?大声笑。
MariusMatutiae '16

他们是给我的。此外,最好仅使用rsync的选项来解决此问题。
temur_p '16

1
@temur_p仅作​​记录:--log-file 的选项rsync
MariusMatutiae '16

我当时在谈论使用awk or sed。看来您不了解问题-如果要使用--log-file,则必须使用来从中提取文件名awk or sed。通过使用第一个消息中提出的解决方案,我可以通过添加if条件来简单地解决问题。
temur_p '16

1

rsync --stats

您可以使用该选项,--stats或者--info=stats2最终使用grep进行过滤。

  rsync -avr ORIG DEST  --stats | grep "Number of created files"

创建的文件:14


rsync您的手册中可以阅读

--stats
这告诉rsync 在文件传输中打印一组详细的统计信息,从而使您能够知道rsync的增量传输算法对数据的有效程度。如果结合使用0或1个-v选项,则此选项等效于--info = stats2;如果结合使用2个或多个-v选项,则此选项等同于--info = stats3。

进一步说明:
我建议您使用MariusMatutiae 提议的日志文件,以防万一您好奇地发现了哪些文件被传输了。
对于grep过滤器,您可以选择感兴趣的每一行:

  • 传输了一些文件的输出示例:

    文件数:15(reg:14,dir:1)
    创建的文件数:14(reg:14)
    删除的文件
    :0 传输的常规文件数:14
    总文件大小:280,860字节已
    传输的文件大小:280,860字节
    字面数据:280,860字节
    匹配数据:0字节
    文件列表大小:0
    文件列表生成时间:0.001秒
    文件列表传输时间:0.000秒
    发送的总字节数:281,842
    接收的总字节数:285

  • 相同的命令,没有文件传输:

    文件数:15(reg:14,dir:1)
    创建的文件
    :0 删除的文件
    数:0传输的常规文件数:0
    总文件大小:280,860字节
    总传输的文件大小:0字节
    文字数据:0字节
    匹配数据:0字节
    文件列表大小:0
    文件列表生成时间:0.001秒
    文件列表传输时间:0.000秒
    发送的总字节数:357
    接收的总字节数:12

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.