2014-01-09 59 views
0

我已經檢查了許多很好的答案,這裏的EXEC()pittfalls,甚至閱讀這篇文章http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html但沒有發現任何幫助。我覺得我在這裏沒有得到任何地方在試驗和錯誤。與參數掙扎的Runtime.exec()

我有這兩個(測試,在命令行上工作)命令,我需要通過.exec()運行:

find <PATH>* -mtime +180 -exec rm {} \; 
find <PATH>* -mtime +1 -gzip -q rm {} \; 

但不管我怎麼傳遞參數我似乎總是得到一個不同的錯誤,沒有按無法告訴我們缺少什麼。例如:在-exec中,我是否需要將{}與參數分開?我是否需要在.exec()的呼叫中關閉\;

我最後一次嘗試看起來像:

rt.exec(new String[]{"find", path+"*", "-mtime", "+180", "-exec rm {}", "\\;"}); 
rt.exec(new String[]{"find", path+"*", "-mtime", "+1", "-exec gzip -q {}", "\\;"}); 

任何幫助,將不勝感激。謝謝。

+0

使用[的ProcessBuilder(http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html),它會讓你的生活變得更輕鬆。另外,你的例子正在使用globbing。你需要一個shell進程來使你的命令工作。 –

回答

1

在命令行運行腳本,如果它工作只是複製該字符串,並將其傳遞給getRuntime.exec(字符串) 也應該指定哪個程序將執行腳本,我猜在這種情況下應該是CMD.EXE

0

這奏效了:

rt.exec(new String[]{"/bin/sh", "-c", "find "+path+"* -mtime +1 -exec gzip -q {} \\;"}); 

譯員需要/bin/sh,並且命令可以去單參數.exec()的其餘部分。