我找到了一个工具来查找重复的文件,现在我准备删除重复的文件。我盯着输出文件的格式看了一会儿,然后想出了这个脚本。
#!/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秒的时间里,我考虑过使用像:s/\(/\\\(/g这样的vim命令来转义字符,我认为这种方法的局限性是非常明显的。有什么想法吗?
发布于 2013-01-20 05:22:13
不要转义它们,只需添加双引号,如下所示:%x[ rm "#{filename}" ]
发布于 2013-01-20 05:20:39
File.unlink(filename)unlink将快几个数量级,并且不需要参数转义
如果您出于某种原因仍然想要使用shell调用-请使用:
system("rm", filename)这样它就可以逃脱所有必须转义的东西。
https://stackoverflow.com/questions/14418903
复制相似问题