在 Dir.chdir - ruby 中使用通配符?

Using wildcards in Dir.chdir - ruby?

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

+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" 不能使用通配符。但是还有其他方法吗?

可以使用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 

您可以在 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.glob 的绝对路径才能使 Dir.chdir 正常工作;我不确定。 File.expand_path 这很方便。