我正在运行 rsync 来从远程主机拉到本地主机。
rsync -a --update user@remotehost:/files/ ~/files/
Run Code Online (Sandbox Code Playgroud)
我正在从 java 运行该命令并使用退出代码来确定它是否成功。
如果修改了任何本地文件,是否可以让该命令报告?通过退出代码返回报告将是理想的。
您无法rsync
通过退出代码告诉您。退出代码已记录了预定义的含义。
我认为从 Java 执行此操作的最佳方法是添加--info=NAME
仅提及更新的目录和文件名的选项:
rsync -a --info=NAME --update user@remotehost/files/ ~/files/
Run Code Online (Sandbox Code Playgroud)
这会在标准输出 (fd = 0) 上打印更新文件和目录的名称,每行一个。
然后,您将从中收集输出rsync
并计算字符串中的换行数。
我认为java
在这个答案中可以找到收集输出的好方法,但我还没有尝试过:https : //stackoverflow.com/a/9048519/5484716
千万不能使用redirectErrorStream
或以任何其他方式合并标准输出的标准错误流。如果这样做,您会将错误消息计为更新的文件,而不是您想要的。
标志--info
onrsync
将输出传输的任何文件的路径。的退出代码rsync
指示成功/失败,因此如果不将脚本包装在命令周围,您将无法使用它,例如
#!/bin/bash
files=$(rsync -a --info=NAME --update user@remotehost/files/ ~/files/)
if [ $files = "" ]; then
# files weren't transferred
exit 0
else
# files were transferred
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
然后从 java 调用该脚本而不是rsync
直接调用命令。 rsync
可能会在传输的开头和结尾输出一些其他文本行,因此您可能需要调整语句if
以考虑额外的输出行,但基本想法是可行的。
归档时间: |
|
查看次数: |
4946 次 |
最近记录: |