Groovy execute “cp *” shell command

两盒软妹~` 提交于 2020-01-11 17:41:32

问题


I want to copy text files and only text files from src/ to dst/

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

You can see the command executes w/out error but the file src/test.txt does not get copied to dst/

This also fails:

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

However...

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

works

Also,

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

works

Why dose the wild card seem to cause my command to silently fail?


回答1:


Wildcard expansion is performed by the shell, not by cp (or groovy). Your first example is trying to copy a file named *. You could make your command "sh -c 'cp ...'"




回答2:


Thanks tedu for getting me half way there.

I believe the reason that his solution didn't work was because of an 'escaping' issue.

For instance...

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

works. But...

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

does not.

There is probably a way to escape it properly in line there but the workaround I'm using is to pass a string array to Runtime.getRuntime().exec

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

works beautifully!



来源:https://stackoverflow.com/questions/183352/groovy-execute-cp-shell-command

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!