2011-09-12 16 views

答えて

15

Rubyの言語文書によると、Dir.entries()はリストされたファイルの特定の順序を保証しないため、何らかの順序が必要な場合は明示的に自分自身で行うのが最善です。あなたは、ファイルの修正時刻(新しい順)にソートする必要がある場合は、次の操作を行うことができ例えば

、:

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

または '.sort_by {| a | File.stat(a).mtime} 'を実行して、いくつかの' stat'呼び出しをスキップします。 –

+2

または '.sort_by {| a | File :: Stat'の割り当てをスキップします。 – cremno

8

私はデフォルトの並べ替え順はありませんが、Dir.entries('some_path_to_dir').sortを使ってASC形式で並べ替えることができます。

+0

こんにちは..ありがとうございます。私の質問の理由は、Dir.entries()が特定の順序(昇順 - 最終変更日)でデータを返すことを前提とした(仕事場のシステム内の)コードがすでに存在するからです。だから、私はそれに固執するか、それを変更して注文を確実にするかどうかはわかりませんでした。 –

0

@maerics'答えに拡大は、以下. && ..、正規表現ベースのフィルタを無視します必要に応じて最新のファイルを選択します。

Dir.chdir(in_dir) 
    target_file = Dir.entries(in_dir).select(|x| 
        x != '.' && 
        x != '..' && 
        x =~ /\somefile.txt\z/).sort_by{|f|File.mtime(f)}.last(1) 
    puts "here i am #{target_file}" 
0

ここに同じ疑いがあるかもしれない他の人のために。正規表現に一致するファイルのみを選択して、まだあなたが望むようにそれらを並べ替えることができるようにする方法は、次のとおりです。

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

または

あなたが望む方法に応じて

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

ファイルを並べ替えます。

Dir.entriesメソッドを使用して同じことを行うことができませんでした