java - 无法使用java基于模式同步文件

标签 java linux ssh rsync

我有一台远程 Linux 机器,我想根据本地机器上文件中的特定模式使用 rsync 提取文件。

当我在终端窗口中时,我可以使用下一个命令执行此任务:

rsync -avzrm --include '**/someDir/*MG*' --include '*/' --exclude '*' -e "ssh -i /home/localUser/.ssh/id_rsa -l remoteUser" remotrUser@ip.address.net:/home/remoteUser/baseDir/ /home/localUser/testDir/

作为此命令的结果,我能够从 baseDir 目录及其名称中包含“MG”的子目录中复制所有文件。

我正在尝试使用 java 代码实现相同的结果:

public class DataDumper {
    public static void main (String[] args){
        try {

            String[] cmd = new String[]{"rsync", "-avzrm", "--include", "'**/someDir/*MG*'", "--include", "'*/'", "--exclude", "'*'", 
                                        "-e", "ssh -i /home/localUser/.ssh/id_rsa -l ec2-user",
                                        "remoteUser@ip.address.net:/home/remoteUser/baseDir/", "/home/localUser/testing"};
            Process p = new ProcessBuilder().command(cmd).inheritIO().start();
        } 
        catch (IOException ex) {ex.printStackTrace();}
        catch (Throwable th) {th.printStackTrace();}
    }
}

但是,我最终将提取 baseDir 目录中的所有文件。 我究竟做错了什么?为什么 java 不能识别 includeexclude 选项? 任何帮助,将不胜感激。谢谢。

我的问题是没有执行命令。 我的问题是命令的某些参数由于某种原因被忽略了。

最佳答案

... "--include", "'**/someDir/*MG*'", "--include", "'*/'", "--exclude", "'*'"

从模式中删除单引号。它们按字面意思传递给 rsync,rsync 可能将它们解释为它应该查找的文件名的一部分。

简而言之,试试这个:

... "--include", "**/someDir/*MG*", "--include", "*/", "--exclude", "*"

在命令行中为这些字段使用单引号的原因是为了防止解释命令的 shell 解释 * 字符。单引号包含 * 的参数将导致 shell 删除单引号并将 * 字符逐字传递给 rsync 程序。

当您通过 java 的 ProcessBuilder 运行 rsync 时,没有 shell,因此无需保护 * 字符。但是也没有什么可以删除单引号字符。

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

相关文章:

java - 如何旋转Android设备相机预览(libgdx)

windows - 无法克隆,可以 SSH。 "Permission denied (publickey)."

linux - 使用pscp将文件从windows传输到linux box

java - HttpServlet : Url that contains ID between resources

java - 如何将 Android 相机输出作为 Java short(不是字节)?

JavaFX如何仅在选中框时显示文本字段

python - RPi 上的 Raspbian - Python 脚本在 IDLE shell 中运行,但不在 cmd 中运行

python - 如何在 linux 上将日文平假名字符输入到 python 2.6 shell?

linux - 如何重新映射符号以调用不同的函数

linux - OpenSSH 拒绝连接到任何主机,无法进行键盘交互式登录