read ruby file-io folder

read - cómo hacer que los archivos cuenten en un directorio usando ruby



ruby file read (7)

Usando ruby ​​para obtener el número de archivos en un directorio determinado, el recuento de archivos debe incluir el recuento de los directorios recursivos.

Por ejemplo: carpeta1 (2 archivos) -----> carpeta2 (4 archivos) y carpeta2 dentro de la carpeta1. el recuento total para el caso anterior debe ser de 6 archivos.

¿Hay alguna función en ruby ​​que me traiga este conteo?


¿Qué tal lo siguiente?

find . -typef|wc -l

Además, ¿cuáles son los inconvenientes de usar esto sobre el método Dir.count?


La forma más rápida en las ventanas para las grandes carpetas sería usar la versión de línea de comandos de buscar todo de esta manera, no sé si Linus tiene algo así como Buscar todo ... Si es así, háganoslo saber.

ES = ''C:/Users/.../everything/es/es.exe'' def filelist path command = %Q{"#{ES}" "#{path}//*"} list = [] IO.popen(command+" 2>&1") do |pipe| while lijn = pipe.gets list << lijn end end list end filelist(path).count

ver aquí los resultados para una carpeta relativamente pequeña (+800 archivos)

Benchmark.bmbm do |x| x.report("glob ") { filelist(path).count } x.report("everything") { Dir.glob("#{folder}/**/*").count } end Rehearsal ---------------------------------------------- glob 0.000000 0.032000 0.032000 ( 0.106887) everything 0.000000 0.000000 0.000000 ( 0.001979) ------------------------------------- total: 0.032000sec user system total real glob 0.016000 0.015000 0.031000 ( 0.110030) everything 0.000000 0.016000 0.016000 ( 0.001881)


La manera más rápida debe ser (sin incluir directorios en el recuento):

Dir.glob(File.join(your_directory_as_variable_or_string, ''**'', ''*'')).select { |file| File.file?(file) }.count

Y más corto:

dir = ''~/Documents'' Dir[File.join(dir, ''**'', ''*'')].count { |file| File.file?(file) }


Por favor, inténtalo:

//we suppose that the variable folder1 is an absolute path here pattern = File.join(folder1, "**", "*") count = Dir.glob(pattern).count


También podría ir muy escueto huesos y hacer un comando del sistema:

count = `ls -1 #{dir} | wc -l`.to_i


Todo lo que necesita es esto, ejecute en el directorio actual.

Dir["**/*"].length

Cuenta directorios como archivos.


Una ligera modificación y un comentario

Dir[''**/*''].count { |file| File.file?(file) }

funciona para mí en Ruby 1.9.3, y es más corto.

Una advertencia, al menos en mi caja de Windows 7, es que Dir[''somedir/**/*''] no funciona. Tengo que usar

cd(somedir) { Dir[''**/*''] }