Ich habe eine Remote-Linux-Maschine, die ich gerne Dateien mit rsync
basierend auf einem bestimmten Muster in der Datei auf einem lokalen Computer ziehen würde.Ich kann keine rsync-Dateien basierend auf einem Muster mit Java
Wenn ich in das Terminal-Fenster Ich bin in der Lage, diese Aufgabe mit dem nächsten Befehl auszuführen:
rsync -avzrm --include '**/someDir/*MG*' --include '*/' --exclude '*' -e "ssh -i /home/localUser/.ssh/id_rsa -l remoteUser" [email protected]:/home/remoteUser/baseDir/ /home/localUser/testDir/
Als Ergebnis dieses Befehls alle Dateien aus dem baseDir
Verzeichnis kopieren Ich bin in der Lage und seine Unterverzeichnisse, die 'MG' in ihrem Namen enthalten.
Ich versuche, das gleiche Ergebnis mit einem Java-Code zu erreichen:
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",
"[email protected]:/home/remoteUser/baseDir/", "/home/localUser/testing"};
Process p = new ProcessBuilder().command(cmd).inheritIO().start();
}
catch (IOException ex) {ex.printStackTrace();}
catch (Throwable th) {th.printStackTrace();}
}
}
Aber ich alle Dateien im Verzeichnis baseDir
zog am landen. Was mache ich falsch? Warum würde Java die Optionen include
und exclude
nicht erkennen? Jede Hilfe wäre willkommen. Vielen Dank.
Mein Problem führt den Befehl nicht aus. Mein Problem ist, dass einige der Argumente des Befehls aus irgendeinem Grund ignoriert werden.
Mögliche Duplikat [Java Process mit mehreren params mit Leerzeichen] (https://stackoverflow.com/questions/15111517/java-processbuilder-with-multiple-params-with-spaces) – Joe
Das ist nicht wirklich hilfreich war. Es ist nicht so, dass ich den Befehl nicht ausführen kann, es ignoriert nur einige der Parameter. – Dan