画像をpngcrushする自動スクリプトを作成しようとしています(私が取り組んでいるWebサイト用)。これを行うスクリプトを作成するためにスクリプト言語としてscalaを使用しました。コマンドを実行するときにスペースを使用することに関して問題があることを除いて、すべてがうまくいっています。使用する必要があることを読みました
Seq(a,b,c,d)
ここで、a、b、c、d は、Scala/Java が文字列を処理する方法を処理するための文字列 (単一のスペースで区切られることを意味します) です。
実行するコマンドを生成するための関連コードはこちらです。結果変数には、すべてのファイル名へのリテラル パスが含まれます
for (fileName <- result) {
val string = Seq("pngcrush","brute","-d","\"" + folder.getPath + "/\"","-e",fileName.getName) ++ fileName.getCanonicalPath.replace(" ","\\ ").split(" ").toSeq
私はそれから使用します
string!
コマンドを実行します。問題は、スペースを含むディレクトリを処理できないため、コマンドの最後のセクション (「-e」フラグの後) のファイル名が適切に実行されないことです。出力例を以下に示します
List(pngcrush, brute, -d, "/tmp/d75f7d89-9ed5-4ff9-9181-41ae2fd82da8/", -e, users_off.png, /Users/mdedetrich/3dot/blublocks/src/main/webapp/img/sidebar/my\, group/users_off.png)
そして、reduceLeft を実行してスペースを元に戻すと、適切な文字列が明らかにわかります。
pngcrush brute -d "/tmp/1eaca157-0e14-430c-b0a4-677491d70583/" -e users_off.png /Users/mdedetrich/3dot/blublocks/src/main/webapp/img/sidebar/my\ group/users_off.png
これが正しいコマンドであるべきです(ターミナルで文字列を手動で実行しても問題ありません)。ただし、これを Scala スクリプトで実行しようとすると、次のようになります。
Could not find file: users_off.png
Could not find file: /Users/mdedetrich/3dot/blublocks/src/main/webapp/img/sidebar/my\
Could not find file: group/users_off.png
CPU time decoding 0.000, encoding 0.000, other 0.000, total 0.000 seconds
私が間違って何をしているのか分かりますか? Scala がスペースを含む文字列を解析しないことに問題があるようです (また、Seq で分割しても機能しません)。スペースを含むリテラル文字列と Seq の両方を使用してみましたが、どちらも機能していないようです。