问题
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