0

我找到了一个查找重复文件的工具,现在我准备删除重复文件。我盯着输出文件的格式看了一会儿,想出了这个脚本。

#!/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

注释print语句是我用来非破坏性测试的东西,它似乎工作得很好。但是当我添加%x命令时,我开始得到

sh: 1: Syntax error: "(" unexpected

我不知道发生了什么,直到我意识到该文件的名称如下/media/LilGalactus/music/Robert Johnson - Complete Recordings/Robert Johnson - The Complete Recordings (Disc2of2)[EAC-FLAC](oan)/s.gif- 即,我的数据充满了未转义的空格、括号等。在大约 30 秒的时间里,我考虑使用 vim 命令来转义字符:s/\(/\\\(/g,我认为这种方法的局限性非常明显。有任何想法吗?

4

2 回答 2

6
File.unlink(filename)

unlink会快几个数量级,并且不需要转义参数

如果您出于某种原因仍想使用 shell 调用 - 请使用:

system("rm", filename)

这样它就会逃避一切必须逃避的事情

于 2013-01-19T21:20:39.447 回答
-3

而不是转义它们,只需添加这样的双引号:%x[ rm "#{filename}" ]

于 2013-01-19T21:22:12.910 回答