2016-04-25 58 views
1

我想从java程序运行rsync。下面是代码:从java程序运行“rsync”的link_stat错误

 String cmd = "rsync -auv /rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv " + archive.getAbsolutePath(); 
     System.out.println(cmd); 

     // capture stdout and stderr from running bash script 
     Process p = Runtime.getRuntime().exec(cmd); 
     String line; 
     BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     while ((line = in.readLine()) != null) { 
      System.out.println(line); 
     } 
     BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream())); 
     while ((line = err.readLine()) != null) { 
      System.out.println(line); 
     } 
     p.waitFor(); 
     in.close(); 
     err.close(); 

然而,当我运行这个java程序,我得到了错误:

rsync -auv /rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv /rsrch1/rists/moonshot/data/dev/foundation/validation/archive 
sending incremental file list 

sent 18 bytes received 12 bytes 60.00 bytes/sec 
total size is 0 speedup is 0.00 
rsync: link_stat "/rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv" failed: No such file or directory (2) 
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6] 

当我运行直接在服务器上确切的命令rsync -auv /rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv /rsrch1/rists/moonshot/data/dev/foundation/validation/archive虽然,它工作得很好。

我不明白为什么它不适用于Java。

+0

你确定/rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv存在吗? >>没有这样的文件或目录 – abkrim

+0

@abkrim,是的。就像我说的这个命令在服务器上的命令行上工作 – Nasreddin

+0

我在我的Mac OS上测试。如果引用“/rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv”rsync不起作用。并且rsync显示它被引用的路径。例如:rsync -auv“* .xml”〜/ borrar/not work。 rsync -auv * .xml〜/ borrar /正常工作。 – abkrim

回答

1

在我做了一些研究之后,我发现这是由命令中的“*”引起的。这是一个通配符,只有bash可以识别,我必须用bash运行这个命令。得到它与以下工作:

String[] cmd = new String[]{"/bin/bash", "rsync -auv /rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv " + archive.getAbsolutePath()};