How to search a folder and all of its subfolders for files of a certain type How to search a folder and all of its subfolders for files of a certain type ruby ruby

How to search a folder and all of its subfolders for files of a certain type


Try this:

Dir.glob("#{folder}/**/*.pdf")

which is the same as

Dir["#{folder}/**/*.pdf"]

Where the folder variable is the path to the root folder you want to search through.


You want the Find module. Find.find takes a string containing a path, and will pass the parent path along with the path of each file and sub-directory to an accompanying block. Some example code:

require 'find'pdf_file_paths = []Find.find('path/to/search') do |path|  pdf_file_paths << path if path =~ /.*\.pdf$/end

That will recursively search a path, and store all file names ending in .pdf in an array.


If speed is a concern, prefer Dir.glob over Find.find.

Warming up --------------------------------------           Find.find   124.000  i/100ms            Dir.glob   515.000  i/100msCalculating -------------------------------------           Find.find      1.242k (± 4.7%) i/s -      6.200k in   5.001398s            Dir.glob      5.249k (± 4.5%) i/s -     26.265k in   5.014632sComparison:            Dir.glob:     5248.5 i/s           Find.find:     1242.4 i/s - 4.22x slower

 

require 'find'require 'benchmark/ips'dir = '.'Benchmark.ips do |x|  x.report 'Find.find' do    Find.find(dir).select { |f| f =~ /\*\.pdf/ }  end  x.report 'Dir.glob' do    Dir.glob("#{dir}/**/*\.pdf")  end  x.compare!end

Using ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin15]