2010-07-02 12 views

Respuesta

12

Creo que esto es bastante breve:

Dir.glob(File.join(path, '*.*')).max { |a,b| File.ctime(a) <=> File.ctime(b) } 
+1

Es posible que desee cambiar el patrón del archivo a '*' a menos que todos sus archivos siempre tengan extensiones. Tenga también en cuenta que los archivos comienzan con. no se considerará –

+2

La versión abreviada: 'Dir [File.join (ruta, '*. *')]. max_by (y File.method (: ctime))' – Raindal

1

puede usar la clase dir para listar todos los archivos y verificar el ctime o atime del objeto de archivo (ctime es el momento en que se cambió el archivo la última vez, atime es el momento en que se accedió al archivo la última vez)

Dir.foreach("testdir") {|f| puts File.ctime(x) } 
+0

¿Cómo ordeno foreach? Solo quiero la ruta del archivo con el ctime más reciente. –

+1

usando sort_by {| f | f.ctime (f)} –

2
Dir.entries("testdir").reject{|f| f== '.' || f=='..'}.sort_by{|f| File.ctime(f)}.last 
0

Dir.glob (root_path + ".") .map {| archivo | [Archivo, File.ctime (archivo)]}. Max.first

0

añadí este método para mi archivo supermanpatches.rb interior de railsapp/config/initializers de abrir la última migración generada (en TextMate) sin tener que copiar y pegar el nombre de archivo o nada así:

def latestmigration 
    `mate db/migrate/#{Dir.glob(File.join(Rails.root, 'db', 'migrate', '*.rb')).max { |a,b| File.ctime(a) <=> File.ctime(b)} }` 
end 

y daga ;: (FYI para ruby ​​/ rieles de principiantes, el código de inicialización es omnipresente y no requiere de alcance de clase a nombre de archivo para ser accesible desde cualquier lugar dentro de los carriles)

NOTA: con las ventanas (o mac) puede usar el comando vim en lugar del comando mate, y s ublimetext se puede configurar para hacer esto también, creo que se llama el comando subl. mate & subl no trabajar de forma predeterminada, aunque creo, así que hay que poner esto en marcha primera

Cuestiones relacionadas