ruby - 如何在目录中查找没有扩展名的文件?

标签 ruby

我正在寻找一个可以找到没有扩展名的文件的代码。在 Rails 中,有一个文件 app_name/doc/README_FOR_APP。我正在寻找一种方法来查找与此类似的文件,但没有与文件关联的扩展名,即“gemfile”。像这样的东西:

file = File.join(directory_path, "**", "__something__")

最佳答案

由于您的问题没有明确指定您是否要递归搜索没有扩展名的文件(尽管在评论中听起来您可能会这样做),或者您是否希望保留带有前导点的文件(即隐藏文件在unix),我包括每个场景的选项。

可见文件(非递归)

Dir['*'].reject { |file| file.include?('.') }

将返回不包含“.”的所有文件的数组。因此只有没有扩展名的文件。

隐藏文件(非递归)

Dir.new('.').entries.reject { |file| %w(. ..).include?(file) or file[1..-1].include?('.') }

这会找到当前目录中的所有文件,然后删除带有“.”的所有文件。在除第一个字符之外的任何字符中(即从索引 1 到末尾的任何字符,也称为索引 -1)。另请注意,由于 Dir.new('.').entries 包含“.”和 '..' 那些也被拒绝。

可见文件(递归)

require 'find'
Find.find('.').reject { |file| File.basename(file).include?('.') }.map { |file| file[2..-1] }

这个 map 末尾的 map 只是为了与其他 map 保持一致,删除了前导的“./”。如果您不关心它,可以将其删除。

隐藏文件(递归)

require 'find'
Find.find('.').reject { |file| File.basename(file)[1..-1].include?('.') }.map { |file| file[2..-1] }

注意:以上每个也将包括目录(有时也被认为是文件,至少在 unix 中是这样)。要删除它们,只需添加 .select { |file| File.file?(file) } 到上述任何一项的末尾。

关于ruby - 如何在目录中查找没有扩展名的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16283744/

相关文章:

ruby-on-rails - 无法在 Windows 下使用 Ruby 2.0.0 为 Redmine 运行任何单元测试。这可能吗?

ruby-on-rails - Rails Association 如果 bool 值为真

ruby - 十六进制转储到二进制 - xxd -r 等效

ruby - 如何总结所有哈希值?

ruby-on-rails - 使用 Ruby on Rails 在 URL 中包含 belongs_to 模型对象的名称

ruby-on-rails - 覆盖 Rails ActiveRecord 销毁行为的最佳方法是什么?

ruby - 在同一行中设置的局部变量未定义

ruby - 如何在 Ruby 中找到字符串中字符的索引?

JavaScript 数组变成 Ruby 哈希

ruby - Puma 服务器无故死机