2014-01-09 60 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()的其余部分。