2011-05-26 183 views
2

發現這很棘手;具有下列代碼:java如何執行終端命令?

String cmd = "find /home/folder/ -type f"; 
Runtime run = Runtime.getRuntime() ; 
Process pr = run.exec(cmd); 
pr.waitFor(); 

我會pr.getInputStream()並有適當的find結果那裏,沒有問題。但是,如果我想要更具體一點,並且我的命令爲cmd = "find /home/folder/ -type f -name somefile*";,則輸入流將爲空。

現在,我認爲這將是與交互式shell所做的字符串擴展有關的東西(在這種情況下,我不會使用它)。在這種情況下,*將沒有意義,find將尋找名爲「*」的文件(如\*)。所以我試圖讓我的命令爲sh -c "find /home/folder/ -type f -name somefile*"。但它也沒有工作...

我錯過了什麼?

謝謝,

f。

Ps .:這是一個AIX機箱,帶有IBM的Java JVM。使用find

+0

是否如期望從終端find命令的工作? – 2011-05-26 10:09:39

+0

是的,它確實.... – filippo 2011-05-26 11:09:31

回答

1

我總是逃避通配符:

cmd = "find /home/folder/ -type f -name somefile\\*"; 
0

我認爲這將是更好,如果你使用的ProcessBuilder或可能的Runtime.exec方法,因爲它們不需要外殼逃避,不通過運行貝殼。