Saltar al contenido

Cómo buscar en una carpeta y en todas sus subcarpetas archivos de cierto tipo

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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *