1

我有一个目录结构,例如这样:

+SOURCE_CODE
          + MODULE_A
            -myfile.txt
          + MODULE_B
            -myfile.txt
          + MODULE_C   
            -myfile.txt

现在我想在每个目录(MODULE_A,MODULE_B)中执行“Dir.chdir”,然后打开“myfile.txt”,然后在其中使用这些文件中的字符串进行操作。它应该是这样的:

  Dir.chdir "../SOURCE_CODE/MODULE_*/"
  File.open("myfile.txt") do |f|
    f.each_line do |line|
      ......

我知道,“Dir.chdir”不能使用通配符。但是有没有替代的方法?

4

2 回答 2

2

您可以将通配符用于Dir.glob

Dir.glob("../SOURCE_CODE/MODULE_*/myfile.txt") do |filename|
  File.open(filename) do |f|
    f.each_line do |line|
      # ...
    end
  end
end

你可以在块内做任何你想做的事情:

Dir.glob("../SOURCE_CODE/MODULE_*/") do |dirname|
  Dir.chdir(dirname)

  File.open("myfile.txt") do |f|
    f.each_line do |line|
      # ...
    end
  end
end

您可能需要提供一个绝对路径才能Dir.globDir.chdir预期工作;我不确定。File.expand_path对此很方便。

于 2015-12-08T13:10:54.960 回答
0

可以使用Pathnameclass遍历目录结构

a = Pathname.new('/sourcecode')
a.children.each do |child1|
  child1.children.do |child2|
    if child2.file
       File.open(child2) do |f|
         f.each_line do |line|
         ...
    end 
  end 
end 
于 2015-12-08T13:08:37.613 回答