需要子目录中的所有文件

Posted

技术标签:

【中文标题】需要子目录中的所有文件【英文标题】:Require all files in sub-directory 【发布时间】:2011-05-30 12:06:07 【问题描述】:

我有以下目录树。

- app.rb
- folder/
  - one/
    - one.rb
  - two/
    - two.rb

我希望能够加载文件夹/目录中的 Ruby 文件,甚至是子目录中的文件。我该怎么做?

【问题讨论】:

***.com/questions/735073/… 的副本。使用 require_all gem 并在one.rb 中执行require 'require_all'; require_rel 'one' 【参考方案1】:

在我的项目中,这会评估为["./fixset.rb", "./spec/fixset_spec.rb", "./spec/spec_helper.rb"],这会导致我的规范运行两次。因此,这是一个经过调整的版本:

Dir[File.join(".", "**/*.rb")].each  |f| require f unless f[/^\.\/spec\//]

这将安全地忽略 ./spec/ 中的所有 *.rb 文件

【讨论】:

【参考方案2】:

试试这个:

Dir.glob(File.join(".", "**", "*.rb")).each do |file|
   require file
end

【讨论】:

这将在 Ruby 1.9.2+ 上中断,因为 '.'不再是 requires 搜索路径的一部分。显式前导 '.'或require_relative 是必需的。 @Phrogz 感谢您的提醒。 :)【参考方案3】:

代码更少,但仍可在 Linux、OS X 和 Windows 上运行:

Dir['./**/*.rb'].each |f| require f 

在当前目录不再是路径的一部分的 Ruby 1.9.2 中需要'.'

【讨论】:

【参考方案4】:

Jekyll 对其插件做了类似的事情。像这样的东西应该可以解决问题:

    Dir[File.join(".", "**/*.rb")].each do |f|
      require f
    end

【讨论】:

如果您有继承,您需要对所需的文件进行排序,以便首先需要***类。 Dir[File.join("#Rails.root/app/classes", "*/.rb")].sort_by |path| path.split("/").length .each 做 |f|要求结束

以上是关于需要子目录中的所有文件的主要内容,如果未能解决你的问题,请参考以下文章

对目录中的所有文件执行命令

在 Cocoa 中搜索目录及其子目录中的所有目录/文件

包含目录中的所有文件?

显示当前目录而不是父目录中的所有隐藏文件

如何在bash中将所有子目录中的所有文件gzip到一个压缩文件中

查找根目录中的所有文件夹