代码之家  ›  专栏  ›  技术社区  ›  slhck

使用通配符对多个输入文件调用Ruby脚本

  •  0
  • slhck  · 技术社区  · 14 年前

    script.rb -i file*
    

    其中目录包含多个文件,如 file1.xml , file2.xml 等等。 OptionParser 用于分析命令行参数的类。

    谢谢!

    4 回复  |  直到 14 年前
        1
  •  5
  •   AdamH    14 年前

    通配符由命令行展开,这样您将得到目录中每个文件的列表

    C:\working>dir *.txt
    
    05/10/2007 03:24 PM 46,101      config.txt
    11/23/2004 11:54 AM 361           tips.txt
    2 File(s) 46,462 bytes
    

    如果你这样做了,

    C:\working>ruby -e "puts ARGV" *.txt
    config.txt
    tips.txt
    

    扩展数组作为新参数。

    使用optparse:

    options = {}
    OptionParser.new do |opts|
        opts.on("-i", Array, "List files") do |v|
          options[:files] = v
        end
      end.parse!
    
    p options
    
    C:\working> script.rb -i *.txt
    

    将打印出来:

    ["config.txt","tips.txt"]
    

    将导致options[:files]成为字符串数组

    http://www.ruby-forum.com/topic/111252

        2
  •  2
  •   tig Charlie Martin    14 年前

    奇怪的使用方法 -i 切换文件列表,如果脚本接受文件,则可以不使用 -我 用开关做其他选择?如果是,就用 ARGV .

        3
  •  1
  •   Andrew Grimm atk    14 年前

    对于Unix,如果要将通配符传递给Ruby本身,则需要对其进行转义(例如将其放在引号内)。当命令行显示所涉及的文件数量时(这可能是一个坏信号!),我使用了这种方法。

        4
  •  0
  •   ghostdog74    14 年前
    Dir["*.txt"].each do |file|
       o = open("tempfile","a")
       open(file).each do |line|
         # lines for processing
         # .....
           o.write(...)
       end
       o.close
       File.rename("tempfile",file)
    end