Question
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?
Solution
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 ...'"
OTHER TIPS
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!