I'm looking for a simple way to use Find.find to produce a list of files/directories for NSIS. Ideally the list will sort files before directories so as to minimize the number of times SetOutPath is used (an NSIS function). The script so far is as follows: -----------snip----------------------- dirs = ["jruby-1.0.3"] excludes = [] for dir in dirs folder = '' Find.find(dir) do |path| if FileTest.directory?(path) if excludes.include?(File.basename(path)) Find.prune # Don't look any further into this directory. else next end else if folder != File.dirname(path) folder = File.dirname(path) puts 'SetOutPath "' + folder + '"' end puts 'File "' + path + '"' end end end -----------------------end snip------------------- Simple directory traversal, no problem there. The issue is that Find.find doesn't allow any sort of ordering to be specified; namely that directories are mixed in with files. The script produces the following output: ---------------output--------------------------------- SetOutPath "jruby-1.0.3/docs" File "jruby-1.0.3/docs/README.rails" File "jruby-1.0.3/docs/README.coverage" File "jruby-1.0.3/docs/Readline-HOWTO.txt" SetOutPath "jruby-1.0.3/docs/rbyaml" File "jruby-1.0.3/docs/rbyaml/README" File "jruby-1.0.3/docs/rbyaml/LICENSE" SetOutPath "jruby-1.0.3/docs" File "jruby-1.0.3/docs/LICENSE.bouncycastle" File "jruby-1.0.3/docs/LICENSE.ant" File "jruby-1.0.3/docs/LICENCE.bsf" SetOutPath "jruby-1.0.3/docs/jvyaml" File "jruby-1.0.3/docs/jvyaml/README" File "jruby-1.0.3/docs/jvyaml/LICENSE" File "jruby-1.0.3/docs/jvyaml/CREDITS" SetOutPath "jruby-1.0.3/docs" File "jruby-1.0.3/docs/Glossary.txt" File "jruby-1.0.3/docs/getting_involved.html" -----------------------end output------------------------- The desired output would sort sub-folders before files when traversing a given directory, thus eliminating the duplicate entries for SetOutPath "jruby-1.0.3/docs" as seen above. ------------desired output-------------------------------- SetOutPath "jruby-1.0.3/docs" File "jruby-1.0.3/docs/README.rails" File "jruby-1.0.3/docs/README.coverage" File "jruby-1.0.3/docs/Readline-HOWTO.txt" File "jruby-1.0.3/docs/LICENSE.bouncycastle" File "jruby-1.0.3/docs/LICENSE.ant" File "jruby-1.0.3/docs/LICENCE.bsf" File "jruby-1.0.3/docs/Glossary.txt" File "jruby-1.0.3/docs/getting_involved.html" SetOutPath "jruby-1.0.3/docs/rbyaml" File "jruby-1.0.3/docs/rbyaml/README" File "jruby-1.0.3/docs/rbyaml/LICENSE" SetOutPath "jruby-1.0.3/docs/jvyaml" File "jruby-1.0.3/docs/jvyaml/README" File "jruby-1.0.3/docs/jvyaml/LICENSE" File "jruby-1.0.3/docs/jvyaml/CREDITS" ------------------------------end output-------------------------- Any ideas?