2016-04-25 3 views
1

Ich wollte rsync von einem Java-Programm ausführen. Hier ist der Code:link_stat Fehler "rsync" von Java-Programm ausgeführt

 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(); 

Jedoch, wenn ich dieses Java-Programm ausführen, habe ich den Fehler:

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] 

Wenn ich laufe, dass genauer Befehl rsync -auv /rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv /rsrch1/rists/moonshot/data/dev/foundation/validation/archive direkt auf dem Server aber es funktioniert gut.

Ich verstehe nicht, warum es nicht mit Java funktioniert.

+0

Sind Sie sicher, dass /rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv vorhanden: erhalten sie mit folgendem zu arbeiten? >> Keine solche Datei oder Verzeichnis – abkrim

+0

@abkrim, Ja. Wie ich schon sagte, dieser Befehl funktioniert in der Befehlszeile auf dem Server – Nasreddin

+0

Ich teste auf meinem Mac OS. Wenn zitiert "/rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv" rsync nicht funktioniert. Und rsync zeigt diesen Pfad an, den es zitiert. Beispiel: rsync -auv "* .xml" ~/borrar/funktioniert nicht. rsync -auv * .xml ~/borrar/funktioniert gut. – abkrim

Antwort

1

Nachdem ich einige Nachforschungen gemacht habe, habe ich herausgefunden, dass dies durch "*" im Befehl verursacht wird. Es ist ein Wildcard nur von bash erkannt, ich muss diesen Befehl mit bash ausführen.

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