我想将文本文件和文本文件从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
作品
为什么使用外卡似乎导致我的命令无声地失败?
答案 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 ......'”