java如何执行终端命令?

时间:2011-05-26 10:00:36

标签: java unix runtime

发现这很棘手;拥有以下代码:

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。

2 个答案:

答案 0 :(得分:1)

使用find时,我总是逃避通配符:

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

答案 1 :(得分:0)

我认为如果您使用ProcessBuilder或Runtime.exec方法会更好,因为它们不需要shell转义并且不会通过shell运行。