14

我想复制文本文件,并且只复制文本文件src/dst/

常规:000>“cp src/*.txt dst/”.execute().text       
===>
常规:000>

您可以看到命令执行时没有错误,但文件src/test.txt没有被复制到dst/

这也失败了:

常规:000>“cp src/* dst/”.execute().text       
===>
常规:000>

然而...

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

作品

还,

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

作品

为什么通配符似乎导致我的命令静默失败?

4

2 回答 2

16

感谢 tedu 让我成功了一半。

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

例如...

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

作品。但...

“sh -c 'ls'”.execute()

才不是。

可能有一种方法可以在那里正确地对其进行转义,但我正在使用的解决方法是将字符串数组传递给 Runtime.getRuntime().exec

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

效果很好!

于 2008-10-08T18:09:17.033 回答
7

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

于 2008-10-08T15:30:12.380 回答