Answers:
Dir.glob("**/*/") # for directories
Dir.glob("**/*") # for all files
而不是Dir.glob(foo)
您也可以编写Dir[foo]
(但是Dir.glob
也可以使用一个块,在这种情况下,它将产生每个路径而不是创建一个数组)。
Dir.glob("**/")
除非您也想要符号链接,否则请使用
File::FNM_DOTMATCH
标志。
Dir.glob("**/*", File::FNM_DOTMATCH)
我相信这里的解决方案都不能处理隐藏目录(例如“ .test”):
require 'find'
Find.find('.') { |e| puts e if File.directory?(e) }
Find.find('/tmp').collect {|_|_}
对我有帮助
有关目录列表,请尝试
Dir['**/']
文件列表比较难,因为在Unix目录中也是文件,因此您需要测试类型或从返回列表中删除条目,该列表是其他条目的父级。
Dir['**/*'].reject {|fn| File.directory?(fn) }
并且仅列出所有文件和目录
Dir['**/*']
仅目录
`find -type d`.split("\n")
目录和普通文件
`find -type d -or -type f`.split("\n")`
require "pathname"
def rec_path(path, file= false)
puts path
path.children.collect do |child|
if file and child.file?
child
elsif child.directory?
rec_path(child, file) + [child]
end
end.select { |x| x }.flatten(1)
end
# only directories
rec_path(Pathname.new(dir), false)
# directories and normal files
rec_path(Pathname.new(dir), true)
end.select {}.flatten()
部分?我总体上喜欢这个功能。看起来会创建一个数组数组?可以用以下方式完成该elseif
部分:rec_path(child, file) << child.to_s
以便将其分配给一个数组并获得一个字符串数组吗?谢谢!
在PHP或其他语言中,要获取目录及其所有子目录的内容,必须编写一些代码行,但是在Ruby中,它需要两行代码:
require 'find'
Find.find('./') do |f| p f end
这将打印当前目录及其所有子目录的内容。
或更短一点,您可以使用’**’
表示法:
p Dir['**/*.*']
您将用PHP或Java写几行以获得相同的结果?
尽管不是单一解决方案,但我认为这是使用ruby调用的最佳方法。
首先以递归方式删除所有文件,
其次删除所有空目录
Dir.glob("./logs/**/*").each { |file| File.delete(file) if File.file? file }
Dir.glob("./logs/**/*/").each { |directory| Dir.delete(directory) }
这是一个结合了动态发现Rails项目目录和Dir.glob的示例:
dir = Dir.glob(Rails.root.join('app', 'assets', 'stylesheets', '*'))
config.assets.paths << Rails.root.join("app", "assets", "*")
,但仍然看不到资产文件夹中的子文件夹和文件,方法是Rails.application.config.assets.paths