2012-05-11 27 views

Respuesta

68

daría un tiro.

var dir = './'; // your directory 

var files = fs.readdirSync(dir); 
files.sort(function(a, b) { 
       return fs.statSync(dir + a).mtime.getTime() - 
         fs.statSync(dir + b).mtime.getTime(); 
      }); 

Utilicé la versión "sincronizada" de los métodos. Debe hacerlos asincrónicos según sea necesario. (Probablemente sólo la parte readdir.)


Es probable que pueda mejorar el rendimiento un poco si se hace una caché la información estadística.

var files = fs.readdirSync(dir) 
       .map(function(v) { 
        return { name:v, 
          time:fs.statSync(dir + v).mtime.getTime() 
         }; 
       }) 
       .sort(function(a, b) { return a.time - b.time; }) 
       .map(function(v) { return v.name; }); 
+0

50th votes up ... – 981

+0

getTime() undefined. – 981

0
+0

fs.readdir() no vuelve en orden cronológico. – Newtang

+2

No creo que ninguna función definida lo haga por usted, pero puede usarlo junto con 'fs.stat (ruta, [devolución de llamada])' (usando el mtime) para ordenar la matriz. http://stackoverflow.com/questions/7559555/last-modified-file-date-in-node-js – Chase

0

Terminé usando subrayado, ya que da la oportunidad de dar cuenta de qué estadística usar para la ordenación.

primero obtener los archivos en el directorio utilizando files = fs.readFileSync(directory); (Es posible que desee probar err capturas en caso directorio no existe o permisos de lectura)

luego se pasa a una función como la siguiente. Eso te devolverá la lista ordenada.

function orderByCTime(directory, files) { 
    var filesWithStats = []; 
    _.each(files, function getFileStats(file) { 
     var fileStats = fs.statSync(directory + file); 

     filesWithStats.push({ 
      filename: file, 
      ctime: fileStats.ctime 
     }); 
     file = null; 
    }); 
    return _.sortBy(filesWithStats, 'ctime').reverse(); 
} 

Underscore sort by asc by default. Lo invierto como lo necesito en orden descendente.

Puede ordenar por otra estadística (check node fs documentation here). Elijo utilizar ctime, ya que también debe representar "tocar" el archivo.

Hope helps,

Cuestiones relacionadas