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,我认为该方法的局限性非常明显.有任何想法吗?
File.unlink(filename)
Run Code Online (Sandbox Code Playgroud)
unlink 会更快一些,不需要参数转义
如果由于某种原因仍然想使用shell调用 - 使用:
system("rm", filename)
Run Code Online (Sandbox Code Playgroud)
通过这种方式,它将逃脱必须转义的所有内容