【问题标题】:Removing file using name contains in Ruby使用名称删除文件包含在 Ruby
【发布时间】:2018-03-11 02:21:34
【问题描述】:

我编写了以下代码来保留与传入名称匹配的文件并删除文件夹中的其余文件。

def removeFiles2(path, namePart)
  aft_logger=AFTLogger.new

  Dir[path+'/*'].each do |fname|
    break if !(fname.include? namePart)
          else File.delete(fname)
          end
  end
end
end

但我收到以下错误。

Operation not permitted - Operation not permitted - //CSLK-CISP-81-01/jboss/server/TeamCI_CEPHEUS_OR_R81_Spider_110/home/RoSModule/XML/In/Error: 
Operation not permitted - Operation not permitted - //CSLK-CISP-81-
01/jboss/server/TeamCI_CEPHEUS_OR_R81_Spider_110/home/RoSModule/XML/In/Error tempDevMode.rb line 37 in function test

我在这里做错了什么?任何帮助将不胜感激。

【问题讨论】:

  • 那是你的实际代码吗?由于修饰符 if-else 构造(没有这样的事情),它会引发 语法错误。你可以写break if condition,但不能写break if condition else ...
  • @Stefan 你错过了未对齐的end :) 实际上是break (if .. else .. end)
  • 是的,这个 break 非常令人困惑 :) 它绝对是一个语法错误(如所写,if/else 周围没有明确的括号)
  • @mayooran 你可以写break unless fname.include? namePart 和下一行File.delete(fname),即没有elseend

标签: ruby file if-statement io automation


【解决方案1】:

下面的代码应该可以工作。试试看吧

def removeFiles(path, namePart)

Dir[path+'/*'].each do |fname|
    if fname.include? namePart
     //just print something you want

    else  
      File.delete(fname)
  end
 end
end

【讨论】:

    【解决方案2】:

    为什么不直接删除所有文件,除非文件基名与您要排除的文件匹配

    def remove_files(path, exclude)
      Dir.glob("#{path}/*").each do |file|
        File.delete(file) unless File.basename(file).include?(exclude)
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多