2011-09-12 9 views

risposta

15

Secondo i documenti in lingua Ruby, Dir.entries() non garantisce alcun ordine particolare dei file elencati, quindi se si richiede un ordine è meglio farlo esplicitamente da soli.

Ad esempio, se hai bisogno di ordinare in base alla data di modifica (più vecchio al più recente), si potrebbe procedere come segue:

Dir.entries('.').sort_by { |x| File.mtime(x) } 
+5

Oppure '.sort_by {| a | File.stat (a) .mtime} 'per saltare alcune chiamate' stat'. –

+2

Oppure '.sort_by {| a | File.mtime (a)} 'per saltare alcune allocazioni' File :: Stat'. – cremno

8

Penso che non ci sia un ordinamento predefinito, ma è possibile utilizzare Dir.entries('some_path_to_dir').sort per ordinarli in modo ASC.

+0

Hi .. grazie. Il motivo per cui mi chiedo è che esiste già del codice (in un sistema sul mio posto di lavoro) che presuppone che Dir.entries() restituirà i dati in un ordine specifico (ascendente-ultima data modificata). Quindi, non ero sicuro di dovermi attenermi o modificarlo per essere sicuro dell'ordine. –

0

Ampliando risposta @maerics', il seguito ignora . && .., filtro regex base e selezionare il file più recente, se lo si desidera.

0

Per gli altri che possono venire qui con lo stesso dubbio. Un modo per selezionare solo i file che corrispondono a un'espressione regolare e ancora in grado di ordinarli nel modo desiderato è:

files_sorted_by_date = Dir["your regex"].sort_by { |x| File.birthtime(x) }.reverse

o

files_sorted_by_date = Dir["your regex"].sort_by { |x| File.birthtime(x) }

A seconda di come volete che il vostro file sortes.

non ho potuto fare lo stesso con il metodo Dir.entries