¿Cómo puedo verificar si un directorio está vacío o no en Ruby? ¿Hay algo así como: (. Yo sé que esa función no existe)Comprobar si el directorio está vacío en Ruby
Dir.exists?("directory")
¿Cómo puedo verificar si un directorio está vacío o no en Ruby? ¿Hay algo así como: (. Yo sé que esa función no existe)Comprobar si el directorio está vacío en Ruby
Dir.exists?("directory")
Usted sólo puede obtener una lista de las entradas y ver por sí mismo si está o no está vacío (bueno, ya tendrá que dar cuenta de "." y ".."). Ver the docs.
(Dir.entries('your_directory') - %w{ . .. }).empty?
# or using glob, which doesn't match hidden files (like . and ..)
Dir['your_directory/*'].empty?
Actualización: el primer método anterior utilizado para utilizar una expresión regular; ahora no (obviamente). Los comentarios a continuación se aplican principalmente a la versión anterior (regex).
El primero me dio errores, pero el segundo funcionó perfectamente. ¡Gracias! –
@Mark Szymanski: Ahh, sí, envolví el bloque entre paréntesis. Fijo. – coreyward
El primer comando también ignorará los archivos ocultos, como .git embargo. –
Puede utilizar las entradas para ver todos los archivos y carpetas en un directorio:
Dir.entries('directory')
=> ['.', '..', 'file.rb', '.git']
Dir.entries('directory').size <= 2 # Check if empty with no files or folders.
También puede buscar archivos sólo con glob:
Dir.glob('directory/{*,.*}')
=> ['file.rb', '.git']
Dir.glob('directory/{*,.*}').empty? # Check if empty with no files.
Pero 'Dir.glob ('directory/*')' omitirá los archivos que comiencen por '.', por ejemplo'.perfil' o '.git'. –
@ (mu es demasiado corta) - Estás en lo cierto. Actualicé mi expresión regular para incluir archivos ocultos también. –
Dir.glob ('directorio /{*,.*}') captura "." y ".." ¿tan vacío? siempre devolverá falso. –
un directorio vacío debe sólo tienen dos enlaces (. y ..). En OSX esto funciona:
File.stat('directory').nlink == 2
... pero no funciona en Linux o Cygwin. (Gracias @DamianNowak) Adaptación de la respuesta de Pan:
Dir.entries('directory').size == 2
debería funcionar.
No es sencillo, pero funciona perfectamente en los sistemas * nix.
Dir.entries(directory_path) == ['.', '..']
Aquí está mi plantilla para esta. FYI, estoy buscando una cierta coincidencia de archivos dentro de la fuente.
mydir = "/home/to/mydir"
Dir.chdir(mydir)
if Dir.entries(mydir).select(|x| x != '.' && x != '..' && x =~ /\regex.txt\z/).size > 0
do_something
elsif Dir.entries(mydir).select(|x| x != '.' && x != '..' && x =~ /\regex.txt\z/).size < 0
do_something_else
else
puts "some warning message"
end
que me haga saber si algo :)
A partir de Rubí 2.4.0, hay Dir.empty?
Dir.empty?('/') # => false
Me gustaría ver un método llamado "Dir.empty?" –
@BenFlynn 5 años después, su deseo [se ha hecho realidad] (http://stackoverflow.com/a/41344613/2021397) – Janosch
@Janosch O esto o la prueba de la existencia de ondas gravitacionales es lo mejor que puede ocurrir en 2016 –