Ruby脚本:%x(命令)和意外(错误

tom*_*tom 0 ruby bash scripting

我找到了一个查找重复文件的工具,现在我已准备好删除重复项.我盯着输出文件的格式了一下,然后想出了这个脚本.

#!/usr/bin/env ruby 

contents = File.open('fdupes-result', 'rb') { |f| f.read }
duplicates = contents.split("\n\n")

duplicates.each do |set|
  list = set.split("\n").reverse
  list.drop(1).each do |filename|
      # print "rm #{filename}"
      %x[ rm #{filename} ]
  end
end
Run Code Online (Sandbox Code Playgroud)

评论的print陈述是我用来非破坏性地测试的东西,它似乎工作得很好.但当我添加%x命令时,我开始得到

sh: 1: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)

我不知道发生了什么,直到我意识到文件的名字就像/media/LilGalactus/music/Robert Johnson - Complete Recordings/Robert Johnson - The Complete Recordings (Disc2of2)[EAC-FLAC](oan)/s.gif- 例如,我的数据充满了未转义的空格,括号等.大约30秒我认为通过使用类似的vim命令来逃避字符:s/\(/\\\(/g,我认为该方法的局限性非常明显.有任何想法吗?

zed*_*xff 6

File.unlink(filename)
Run Code Online (Sandbox Code Playgroud)

unlink 会更快一些,不需要参数转义

如果由于某种原因仍然想使用shell调用 - 使用:

system("rm", filename)
Run Code Online (Sandbox Code Playgroud)

通过这种方式,它将逃脱必须转义的所有内容