在Ruby中,如何在目录列表中的文件夹之前列出/排序文件?

时间:2010-10-09 00:19:47

标签: ruby directory filesort

我必须在ruby中使用代码:

<%
  files = Dir.glob('/**/*')
  files.each do |file|
    puts file
  end
%>

输出(例如):

/dirA/file1.txt
/dirA/file2.txt
/dirB/file1.txt
/file1.txt
/file2.txt
/subdirA/file1.txt

我希望它像这样输出:

/file1.txt
/file2.txt
/dirA/file1.txt
/dirA/file2.txt
/dirB/file1.txt
/subdirA/file1.txt

基本上,我想在目录之前显示文件。我可以使用排序命令吗?

2 个答案:

答案 0 :(得分:6)

我相信这对你有用:

files = Dir.glob('**/*')
files = files.map { |file| [file.count("/"), file] }
files = files.sort.map { |file| file[1] }
files.each do |file|
  puts file
end

如果您使用的是Ruby 1.8,请将"/"更改为?/

或者,作为一个单行::))

Dir.glob('**/*').map { |file| [file.count("/"), file] }.sort.map { |file| file[1] }.each { |file| puts file }

答案 1 :(得分:1)

d,f = Dir.glob('*').partition{|d|test(?d,d)}
d.sort.each{|x|puts x}
f.sort.each{|y|puts y}