我正在尝试编写一个自动脚本来压缩我的图像(对于我正在处理的网站),我使用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,两者似乎都不起作用。
答案 0 :(得分:0)
你为什么这样做:
replace(" ","\\ ").split(" ")
那正在分裂论点,而不是Process
。你为什么不只使用以下内容?
val string = Seq("pngcrush",
"brute",
"-d","\"" + folder.getPath + "/\"",
"-e",fileName.getName,
fileName.getCanonicalPath)