gpt4 book ai didi

java - 无法在 linux 上使用 rsync 同步单个文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:23:55 24 4
gpt4 key购买 nike

我有一个在 Linux 服务器上运行的应用程序。在运行时,此应用程序会创建某些文件,并在创建后使用 rsync 程序将它们复制到不同的服务器(也是 Linux)。起初我使用下一段代码同步整个库:

    private void sync(){
try {
String[] cmd = new String[]{"rsync", "--ignore-existing", "-Wre", "/usr/bin/sudo /usr/bin/ssh -i /home/user/.ssh/id_rsa", "/home/user/IntSrv/Sync/Observation",
"user@some.server:/home/user/GenSrv/Sync/"};
Process p = new ProcessBuilder().command(cmd).start();
} catch (IOException ex) {ex.printStackTrace();}}

它工作正常,所有文件都已同步。

目前我正在尝试更改代码以便一次同步单个文件。我已将代码更改为:

private void sync(){
String orgPath = "/home/user/IntSrv/Sync/" + F.getAbsolutePath().substring(F.getAbsolutePath().indexOf("Observation")).replace("\\", "/");
String destPath = "user@some.server:/home/user/GenSrv/Sync/" + F.getAbsolutePath().substring(F.getAbsolutePath().indexOf("Observation"), F.getAbsolutePath().indexOf(F.getName())).replace("\\", "/");
try {
String[] cmd = new String[]{"rsync", "-avz", "/usr/bin/sudo /usr/bin/ssh -i /home/user/.ssh/id_rsa", orgPath, destPath};
Process p = new ProcessBuilder().command(cmd).start();
} catch (IOException ex) {ex.printStackTrace();}
}

不幸的是,文件不同步。以下是 orgPathdestPath 的示例:

orgPath = "/home/user/IntSrv/Sync/Observation/2017/204/17d/06/SROD204G30.17o"

destPath = "user@some.server:/home/user/GenSrv/Sync/Observation/2017/204/17d/06/"

我已经在屏幕上打印出 rsync 输出。在使用它打印出来的工作代码时:

发送增量文件列表
观察/2017/204/17d/08/BRIG204I18.17o
966.11K 100% 111.26MB/s 0:00:00 (xfer#1, to-check=0/6)
发送 966.40K 字节接收 36 字节 1.93M 字节/秒

在运行第二个时打印出:

权限被拒绝(公钥)。
rsync:连接意外关闭(到目前为止收到 0 个字节)[发件人]
rsync 错误:io.c(600) [sender=3.0.6] 无法解释的错误(代码 255)

这怎么可能?为什么我有权同步整个目录而不是单个文件?我究竟做错了什么?谁能解决这个问题?感谢您的帮助。

最佳答案

您缺少 -e 标志,它将指示 rsync 使用带有 ssh 私钥的 ssh

"-avz" 更改为 "-avze" 就完成了。

关于java - 无法在 linux 上使用 rsync 同步单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45262230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com