Ответ 1
Расширение подстановок выполняется оболочкой, а не cp (или groovy). В первом примере мы попытаемся скопировать файл с именем *. Вы можете сделать команду "sh -c" 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
работы
Почему доза дикой карты, похоже, заставляет мою команду тихо выходить из строя?
Расширение подстановок выполняется оболочкой, а не cp (или groovy). В первом примере мы попытаемся скопировать файл с именем *. Вы можете сделать команду "sh -c" cp... "
Спасибо 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())
работает красиво!