首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby脚本:%x(命令)和意外(错误

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

Stack Overflow用户
提问于 2013-01-20 05:10:26
回答 2查看 347关注 0票数 0

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

代码语言:javascript
复制
#!/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命令时,我开始得到

代码语言:javascript
复制
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命令来转义字符,我认为这种方法的局限性是非常明显的。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-20 05:22:13

不要转义它们,只需添加双引号,如下所示:%x[ rm "#{filename}" ]

票数 -3
EN

Stack Overflow用户

发布于 2013-01-20 05:20:39

代码语言:javascript
复制
File.unlink(filename)

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

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

代码语言:javascript
复制
system("rm", filename)

这样它就可以逃脱所有必须转义的东西。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14418903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档