我尝试做类似的事情:
list = Dir["*.mp4"]
`zip "test.zip" "#{list}"`
但是#{list}
作为数组出现,我该如何解决?
答案 0 :(得分:3)
您应该使用标准库中的Shellwords,该标准库专门用于执行此操作,并且无论您的文件名有多奇怪,都可以正确转义:
require 'shellwords'
list = Dir["*.mp4"]
puts [ "zip", "test.zip", *list ].shelljoin
# => zip test.zip foo.mp4 filename\ with\ spaces.mp4 etc.mp4
答案 1 :(得分:2)
看起来你没有将结果存储在任何地方,所以你应该使用system
的多参数形式并完全绕过shell:
system('zip', 'test.zip', *list)
由于没有调用shell,你不必担心引用或解析或任何废话,只需构建一个字符串列表并将其展开。
如果确实需要捕获输出,请使用Open3
方法之一。反引号几乎总是错误的方法,有太多尖锐的边缘(只需浏览Ruby的CERT报告,你就会看到反引号和system
的单个参数形式引起问题的频率)。
答案 2 :(得分:0)
http://www.ruby-doc.org/core-2.1.2/Array.html#method-i-join
您正在寻找加入方法
["a","b","c"].join(" ") => "a b c"
["a","b","c"].join("-|-") => "a-|-b-|-c"