2008-10-08 106 views
11

我想文本文件和纯文本文件复制从src/dst/Groovy的执行者“CP *” shell命令

 
groovy:000> "cp src/*.txt dst/".execute().text  
===> 
groovy:000> 

你可以看到命令执行瓦特/出错误,但该文件src/test.txt不被复制到dst/

这也将失败:

 
groovy:000> "cp src/* dst/".execute().text  
===> 
groovy:000> 

但是...

 
"cp src/this.txt dst/".execute().text 

工作

此外,

 
"cp -R src/ dst".execute().text 

工作

为什么剂量的外卡似乎导致我的命令,以静默失败?

回答

6

通配符扩展是由shell执行的,而不是由cp(或groovy)执行的。你的第一个例子是试图复制一个名为*的文件。你可以让你的命令“sh -c'cp ...'”

13

感谢tedu让我在那里一半。

我相信他的解决方案不起作用的原因是因为'逃避'的问题。

例如...

 
"sh -c 'ls'".execute() 

作品。但是...

 
"sh -c 'ls '".execute() 

没有。

有可能是一种方法,在网上有,但我使用的是正确的解决方法逃避它是一个字符串数组传递给调用Runtime.getRuntime()。exec的精美

 
command = ["sh", "-c", "cp src/*.txt dst/"] 
Runtime.getRuntime().exec((String[]) command.toArray()) 

作品!

+2

我认为你可以简化使用: 命令= .... command.execute() 作为阵列也理解执行 – TimM 2010-01-06 21:59:18