Deseo obtener todos los nombres de archivos de una carpeta usando Ruby.Obtener nombres de todos los archivos de una carpeta con Ruby
Respuesta
También tiene la opción de acceso directo de
Dir["/path/to/search/*"]
y si usted quiere encontrar todos los archivos de Ruby en cualquier carpeta o subcarpeta:
Dir["/path/to/search/**/*.rb"]
Dir.entries(folder)
ejemplo:
Dir.entries(".")
Fuente: http://ruby-doc.org/core/classes/Dir.html#method-c-entries
parece que está usando para documentar las respuestas a preguntas que sólo ha pedido. Una especie de memo, supongo. No puedo ver mucho mal con eso, después de todo, aunque este es un poco incompleto (por ejemplo, "Dir # glob" podría haberse mencionado), no hay nada que impida que alguien publique una Respuesta Muy Buena. 'Por supuesto, soy principalmente un tipo "medio lleno de vidrio" ... –
@Mike: En el gran esquema de las cosas, probablemente no sea gran cosa. Y como dices si las preguntas y respuestas fueron buenas, podría ser una ventaja general para el sitio. Pero aquí tanto la pregunta como la respuesta son tan mínimas que no parecen especialmente útiles. – Telemachus
@Telemachus Yo uso 'Dir' rara vez, y cada vez que lo necesito tengo que leer la documentación. He publicado mi pregunta y respuesta aquí para poder encontrarla más tarde, y tal vez incluso ayudar a alguien con la misma pregunta. Creo que escuché en el podcast de SO que no hay nada de malo en tal comportamiento. Si tiene una mejor respuesta, publíquela. He publicado lo que sé, no soy un ninja de Ruby. Regularmente acepto respuestas con la mayor cantidad de votos. –
Los siguientes fragmentos exactamente muestra el nombre de los archivos dentro de un directorio, subdirectorios que saltan y "."
, ".."
carpetas de puntos:
Dir.entries("your/folder").select {|f| !File.directory? f}
También puede hacer '... seleccionar {| f | File.file? f} 'para un significado más claro y una sintaxis más corta. – Automatico
Veo que Dir.entries no muestra la ruta completa en el nombre del archivo, por lo que esta solución no me funcionó. –
@ Cort3z, no funciona para mí. – squixy
para obtener todos los archivos (en sentido estricto sólo de archivos) de forma recursiva:
Dir.glob('path/**/*').select{ |e| File.file? e }
(archivos
File.file?
rechazaría no regulares)
o cualquier cosa que no es un directorio:
Dir.glob('path/**/*').reject{ |e| File.directory? e }
Solución Alternativa
Usando Find#find
más de un método de búsqueda basado en patrones como Dir.glob
es realmente mejor. Ver this answer to "One-liner to Recursively List Directories in Ruby?".
Personalmente, he encontrado este el más útil para recorrer más de los archivos en una carpeta, a futuro la seguridad:
Dir['/etc/path/*'].each do |file_name|
next if File.directory? file_name
end
Ésta es una solución para encontrar archivos en un directorio:
files = Dir["/work/myfolder/**/*.txt"]
files.each do |file_name|
if !File.directory? file_name
puts file_name
File.open(file_name) do |file|
file.each_line do |line|
if line =~ /banco1/
puts "Found: #{line}"
end
end
end
end
end
Mientras obtener todos los nombres de archivo en un directorio, este fragmento se puede usar para rechazar ambos directorios [.
, ..
] y archivos ocultos que comienzan con .
files = Dir.entries("your/folder").reject {|f| File.directory?(f) || f[0].include?('.')}
' Dir.entries' devuelve nombres de archivos locales, no rutas de archivos absolutas. Por otro lado, 'File.directory?' Espera una ruta de archivo absoluta. Este código no funciona como se esperaba. – Nathan
Es extraño que el código no funcione en su caso. Como este es un código que he usado en una aplicación en vivo que funciona bien. Voy a volver a verificar mi código y publicar aquí si falta algo en mi código de trabajo original :) – Lahiru
@Nathan Consulte mi respuesta para obtener una explicación – nus
def get_path_content(dir)
queue = Queue.new
result = []
queue << dir
until queue.empty?
current = queue.pop
Dir.entries(current).each { |file|
full_name = File.join(current, file)
if not (File.directory? full_name)
result << full_name
elsif file != '.' and file != '..'
queue << full_name
end
}
end
result
end
vuelve rutas relativas de archivos de directorio y todos los subdirectorios
Esto funciona para mí:
Si no desea que los archivos ocultos [1], utilizan Dir []:
# With a relative path, Dir[] will return relative paths
# as `[ './myfile', ... ]`
#
Dir[ './*' ].select{ |f| File.file? f }
# Want just the filename?
# as: [ 'myfile', ... ]
#
Dir[ '../*' ].select{ |f| File.file? f }.map{ |f| File.basename f }
# Turn them into absolute paths?
# [ '/path/to/myfile', ... ]
#
Dir[ '../*' ].select{ |f| File.file? f }.map{ |f| File.absolute_path f }
# With an absolute path, Dir[] will return absolute paths:
# as: [ '/home/../home/test/myfile', ... ]
#
Dir[ '/home/../home/test/*' ].select{ |f| File.file? f }
# Need the paths to be canonical?
# as: [ '/home/test/myfile', ... ]
#
Dir[ '/home/../home/test/*' ].select{ |f| File.file? f }.map{ |f| File.expand_path f }
Ahora, Dir.entries volverá archivos ocultos, y que no es necesario el aster comodín ix (simplemente puede pasar la variable con el nombre del directorio), pero devolverá el nombre base directamente, por lo que las funciones de File.xxx no funcionarán.
# In the current working dir:
#
Dir.entries('.').select{ |f| File.file? f }
# In another directory, relative or otherwise, you need to transform the path
# so it is either absolute, or relative to the current working dir to call File.xxx functions:
#
home = "/home/test"
Dir.entries(home).select{ |f| File.file? File.join(home, f) }
[1] .dotfile
en UNIX, no sé acerca de Windows
Si desea obtener una serie de nombres de archivo incluyendo enlaces simbólicos, utilice
Dir.new('/path/to/dir').entries.reject { |f| File.directory? f }
o incluso
Dir.new('/path/to/dir').reject { |f| File.directory? f }
y si quieres ir sin enlaces simbólicos, utilice
Dir.new('/path/to/dir').select { |f| File.file? f }
Como se muestra en otras respuestas, utilice Dir.glob('/path/to/dir/**/*')
en lugar de Dir.new('/path/to/dir')
si desea obtener todos los archivos de forma recursiva.
O simplemente use '*. *' –
Dir.new('/home/user/foldername').each { |file| puts file }
Esto es lo que funciona para mí:
Dir.entries(dir).select { |f| File.file?(File.join(dir, f)) }
Dir.entries
devuelve una matriz de cadenas. Luego, debemos proporcionar una ruta completa del archivo al File.file?
, a menos que dir
sea igual a nuestro directorio de trabajo actual. Es por eso que este File.join()
.
También es posible que desee utilizar Rake::FileList
(siempre que tenga rake
dependencia):
FileList.new('lib/*') do |file|
p file
end
De acuerdo con la API:
filelists son perezosos. Cuando se le presente una lista de patrones globales para posibles archivos que se incluirán en la lista de archivos, en lugar de buscar en el archivo estructuras para buscar los archivos, una Lista de archivos contiene el patrón para el último uso de .
- 1. ¿Cómo obtener los nombres de los archivos?
- 2. Buscar todos los archivos en una carpeta
- 3. Obtener todos los nombres de archivos en un nombre de carpeta dado
- 4. C#: Obtener todos los archivos de imagen en la carpeta
- 5. ¿Cómo recorro todos los archivos en una carpeta usando C?
- 6. Obtener todos los nombres de archivo que comienzan con un prefijo de la carpeta de recursos
- 7. Android, ¿cómo puedo obtener una lista de todos los archivos en una carpeta?
- 8. Lista de todos los recursos incrustados en una carpeta
- 9. Obtener archivos en una carpeta
- 10. ¿Cómo obtener todos los nombres de clase en un espacio de nombres en Ruby?
- 11. Eliminar carpeta y todos los archivos/subdirectorios
- 12. Mueva todos los archivos de una carpeta a otra carpeta con java
- 13. Fuerza Borrar todos los archivos de una carpeta
- 14. ¿Cómo obtener todos los nombres de propiedades en una entidad?
- 15. ¿Cómo obtener todos los archivos de texto de una carpeta usando Java?
- 16. Sangría en VIM con todos los archivos en la carpeta
- 17. java: obtener todos los nombres de variables en una clase
- 18. SharpSVN leyó TODOS los nombres de archivo
- 19. ¿Cómo puedo obtener phpunit para ejecutar pruebas de todos los archivos en una carpeta?
- 20. ¿Deberían todos los archivos ruby tener una estructura de módulo que coincida con la estructura de la carpeta?
- 21. macro - abrir todos los archivos en una carpeta
- 22. mover todos los archivos en una carpeta a otra?
- 23. Git: cómo obtener todos los archivos modificados y nuevos en una carpeta o zip?
- 24. obtener todos los subdirectorios inmediatos en ruby
- 25. Obtener todos los nombres de los archivos en el directorio usando JFileChooser?
- 26. ¿Cómo obtener la lista de archivos con una extensión específica en una carpeta determinada?
- 27. Amazon AWS IOS SDK: cómo enumerar TODOS los nombres de archivo en una CARPETA
- 28. C# eliminar una carpeta y todos los archivos y carpetas dentro de esa carpeta
- 29. Cambie el nombre de todos los archivos en la carpeta con números crecientes
- 30. Linux todos los archivos de la carpeta modificada ayer
O puede hacer lo mismo con Dir :: glob() –
Muchas gracias, estoy usando Dir [] en este momento. :) –
Además, use './...' en lugar de '~ /' –