2011-05-26 165 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方法,因为它们不需要外壳逃避,不通过运行贝壳。