Groovy执行“cp *”shell命令

时间:2008-10-08 15:21:57

标签: groovy

我想将文本文件和文本文件从src/复制到dst/

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

您可以看到该命令执行w / out错误但文件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

作品

为什么使用外卡似乎导致我的命令无声地失败?

2 个答案:

答案 0 :(得分:14)

感谢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())

工作得很漂亮!

答案 1 :(得分:6)

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