Groovy выполнить команду "cp *" оболочки

Я хочу скопировать текстовые файлы и только текстовые файлы с 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

работы

Почему доза дикой карты, похоже, заставляет мою команду тихо выходить из строя?

Ответ 1

Расширение подстановок выполняется оболочкой, а не cp (или groovy). В первом примере мы попытаемся скопировать файл с именем *. Вы можете сделать команду "sh -c" cp... "

Ответ 2

Спасибо 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())

работает красиво!