¿Cuál es la forma más rápida, optimizada y de una sola línea de obtener una matriz de directorios (excluyendo archivos) en Ruby?
¿Qué tal incluir archivos?
ruby
filesystems
recursion
Lance Pollard
fuente
fuente
Respuestas:
En lugar de
Dir.glob(foo)
usted también puede escribirDir[foo]
(sin embargoDir.glob
también puede tener un bloque, en cuyo caso se producirá cada ruta en lugar de crear una matriz).Documentos de Ruby Glob
fuente
Dir.glob("**/")
menos que también desee enlaces simbólicosFile::FNM_DOTMATCH
bandera.Dir.glob("**/*", File::FNM_DOTMATCH)
Creo que ninguna de las soluciones aquí trata con directorios ocultos (por ejemplo, '.test'):
fuente
Find.find('/tmp').collect {|_|_}
Fue útil para míPara obtener una lista de directorios, intente
La lista de archivos es más difícil, porque en Unix el directorio también es un archivo, por lo que debe probar el tipo o eliminar las entradas de la lista devuelta, que es padre de otras entradas.
Y para una lista de todos los archivos y directorios simplemente
fuente
Un trazador de líneas rápido
Solo directorios
Directorios y archivos normales
Rubí puro hermoso
fuente
end.select {}.flatten()
parte? Me gusta la función en general. ¿Parece que eso creará una matriz de matrices? ¿Sería posible hacer laelseif
parte con:rec_path(child, file) << child.to_s
para poder asignarlo a una matriz y obtener una matriz de cadenas? ¡Gracias!Como se señaló en otras respuestas aquí, puede usar
Dir.glob
. Tenga en cuenta que las carpetas pueden tener muchos caracteres extraños y los argumentos globales son patrones, por lo que algunos caracteres tienen significados especiales. Como tal, no es seguro hacer algo como lo siguiente:En su lugar, haz lo siguiente:
fuente
En PHP u otros lenguajes para obtener el contenido de un directorio y todos sus subdirectorios, debes escribir algunas líneas de código, pero en Ruby se necesitan 2 líneas:
esto imprimirá el contenido del directorio actual y todos sus subdirectorios.
O más corto, puede usar la
’**’
notación:¿Cuántas líneas escribirás en PHP o en Java para obtener el mismo resultado?
fuente
Aunque no es una solución de una línea, creo que esta es la mejor manera de hacerlo usando llamadas ruby.
Primero elimine todos los archivos de forma recursiva
Segundo elimine todos los directorios vacíos
fuente
Aquí hay un ejemplo que combina el descubrimiento dinámico de un directorio de proyecto Rails con Dir.glob:
fuente
config.assets.paths << Rails.root.join("app", "assets", "*")
, pero todavía no podía ver las subcarpetas y archivos dentro de la carpeta de activos porRails.application.config.assets.paths
los puntos devuelven cero, use compacto
fuente