2012-05-22 7 views
5

folgende Arbeiten aus dem Terminal kein ProblemJava ausführen Kommandozeilenprogramm ‚find‘ gibt Fehler

find testDir -type f -exec md5sum {} \; 

Wo testDir ein Verzeichnis, das einige Dateien enthält (zB Datei1, Datei2 und file3).

Allerdings bekomme ich einen Fehler mit der folgenden in Java

Runtime rt = Runtime.getRuntime(); 
Process pr = rt.exec("find testDir -type f -exec md5sum {} \\;"); 

Der Fehler ist

find: missing argument to `-exec' 

Ich glaube, ich richtig die Zeichen am entkommen. Ich habe verschiedene Formate ausprobiert und kann das nicht zum Laufen bringen.

UPDATE @jtahlborn beantwortete die Frage perfekt. Aber der Befehl hat sich jetzt leicht geändert, um jede Datei im dir zu sortieren, bevor die md5sum berechnet wird und ist wie folgt (Ich habe die ausgezeichnete Antwort für die ursprüngliche Frage bereits akzeptiert, also werde ich jemandem ein Bier kaufen, wenn sie das Format finden können . für diese ich habe jede Kombination habe ich versucht im Anschluss an die Antwort unten ohne Erfolg denken kann)

„testdir -type f -exec md5sum finden {} + |. awk {print $ 1} | Sortierung | md5sum "

NEW UPDATE

Für Rohr, benötigen Sie eine Schale so endete ich damit auf, was funktioniert gut und man kann immer noch die Ausgabe erhalten.

Runtime rt = Runtime.getRuntime(); 
Process pr = rt.exec(new String[] 
{ 
    "sh", "-l", "-c", "find " + directory.getPath() + " -type f -exec md5sum {} + | awk '{print $1}' | sort | md5sum" 
}); 
+0

Wie erhalten Sie das Feedback? Eine [SSCCE] (http://SSCCE.org) wäre in Ordnung. –

Antwort

5

Verwenden Sie den Multiargument-Aufruf von exec (andernfalls können Sie von Escape-Regeln gebissen werden). auch, da man nicht von einem Shell-Skript aufrufen werden, müssen Sie nicht das Semikolon zu entkommen:

Process pr = rt.exec(new String[]{"find", "testDir", "-type", "f", "-exec", "md5sum", "{}", ";"}); 
+0

Brilliant. Ich habe das früher versucht, aber hatte die ganze exec params als eine Zeichenfolge - "-exec", "md5sum {};" –

+1

oder Runtime.getRuntime(). Exec ("finde testDir -typ f -exec md5sum {} \\;". Split ("")); – ianpojman

+0

Okay, ich werde dir ein Bier kaufen, wenn du das formatieren kannst "find testDir -type f -exec md5sum {} + | awk {print $ 1} | sort | md5sum;" –

0

Für Dinge wie Rohr, benötigen Sie eine Schale, die Sie nicht mit Runtime.exec bekommt.

Runtime rt = Runtime.getRuntime(); 
Process pr = rt.exec(new String[] 
{ 
    "sh", "-l", "-c", "find " + directory.getPath() + " -type f -exec md5sum {} + | awk '{print $1}' | sort | md5sum" 
}); 
Verwandte Themen