我正在寻找一个可以找到没有扩展名的文件的代码。在 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/