14

から にテキスト ファイルのみをコピーしsrc/たいdst/

groovy:000> "cp src/*.txt dst/".execute().text       
===>
グルーヴィー:000>

コマンドはエラーなしで実行されますが、ファイルsrc/test.txtはコピーされませんdst/

これも失敗します:

groovy:000> "cp src/* dst/".execute().text       
===>
グルーヴィー:000>

でも...

"cp src/this.txt dst/".execute().text

作品

また、

"cp -R src/dst".execute().text

作品

ワイルドカードを使用すると、コマンドが暗黙のうちに失敗するように見えるのはなぜですか?

4

2 に答える 2

16

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())

美しく動作します!

于 2008-10-08T18:09:17.033 に答える
7

ワイルドカード展開は、cp (または groovy) ではなく、シェルによって実行されます。最初の例は、* という名前のファイルをコピーしようとしています。コマンドを「sh -c 'cp ...'」にすることができます

于 2008-10-08T15:30:12.380 に答える