Solución:
Prueba esto:
Dir.glob("#{folder}/**/*.pdf")
que es lo mismo que
Dir["#{folder}/**/*.pdf"]
Donde la variable de carpeta es la ruta a la carpeta raíz en la que desea buscar.
Quieres el módulo Buscar. Find.find
toma una cadena que contiene una ruta y pasará la ruta principal junto con la ruta de cada archivo y subdirectorio a un bloque adjunto. Algún código de ejemplo:
require 'find'
pdf_file_paths = []
Find.find('path/to/search') do |path|
pdf_file_paths << path if path =~ /.*.pdf$/
end
Eso buscará recursivamente una ruta y almacenará todos los nombres de archivo que terminan en .pdf en una matriz.
Si le preocupa la velocidad, prefiera Dir.glob
sobre Find.find
.
Warming up --------------------------------------
Find.find 124.000 i/100ms
Dir.glob 515.000 i/100ms
Calculating -------------------------------------
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.014632s
Comparison:
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
Utilizando ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin15]
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)