Groovy выполнить команду оболочки "cp *" - PullRequest
13 голосов
/ 08 октября 2008

Я хочу скопировать текстовые файлы и только текстовые файлы из src/ в dst/

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

Вы видите, что команда выполняется без ошибок, но файл 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

работает

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

Ответы [ 2 ]

14 голосов
/ 08 октября 2008

Спасибо Теду за то, что отвел меня на полпути.

Я полагаю, что причина, по которой его решение не сработало, была из-за проблемы с побегом.

Например ...

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

работает. Но ...

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

нет.

Вероятно, есть способ избежать его корректно в строке, но я использую обходной путь, чтобы передать строковый массив в Runtime.getRuntime (). Exec

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

прекрасно работает!

6 голосов
/ 08 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...