5

私はルビーのコードに従う必要があります:

<%
  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

基本的には、ディレクトリの前にファイルを表示したいのですが。使用できる並べ替えコマンドはありますか?

4

2 に答える 2

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

Ruby1.8を使用している場合はに変更"/"します。?/

または、ワンライナーとして::)

Dir.glob('**/*').map { |file| [file.count("/"), file] }.sort.map { |file| file[1] }.each { |file| puts file }
于 2010-10-09T00:31:34.930 に答える
1
d,f = Dir.glob('*').partition{|d|test(?d,d)}
d.sort.each{|x|puts x}
f.sort.each{|y|puts y}
于 2010-10-09T01:34:55.240 に答える