2008-10-08 2 views
11

Я хочу, чтобы скопировать текстовые файлы и только текстовые файлы с src/ в dst/Groovy выполнить команду «ср *» оболочка

 
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 

работы

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

ответ

6

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

13

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

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

+2

Я думаю, вы могли бы упростить, что с: команды = .... command.execute() Как массивы также понять, выполнить – TimM 2010-01-06 21:59:18

Смежные вопросы