2016-05-27 13 views
1

私はbashの再帰的サイクル

How to recursively find the latest modified file in a directory?を使用してについては、この記事を発見しました(bashのを使用しています)

しかし、私はルビーでこれを書く必要があります私は、 "アクティブ"という名前のネットワークフォルダを持つシナリオを持っています。多くのサブディレクトリがあり、各サブディレクトリには子ディレクトリがあり、子ディレクトリには子ディレクトリがあります。私は多くの子ディレクトリのどこかに埋め込まれたlvl1ディレクトリに含まれている最新の変更されたファイルの日付を返す必要があります。

--------------------------- 
active | lvl1 | lvl2 | lvl3 
     |  |  | lvl3 
     |  | lvl2 | 
     |  | lvl2 | 
     |  | lvl2 | 
     | lvl1 |  | 
--------------------------- 

ファイル名を返すための素晴らしい作品が、イムはFile.mtimeを(保存する場所に貼り付け、私が現在持っているものとエディット)各ファイルのoccuranceのために、私はアーカイブする必要があるLVL1フォルダを識別する必要があります:

def walk(start) 
    Dir.foreach(start) do |x| 
    path = File.join(start, x) 
    if x == "." or x == ".." 
     next 
    elsif File.directory?(path) 
     walk(path) 
    else 
     puts x 
    end 
    end 
end 


path = 'folder\\path' 

walk(path) 
+0

主なタスクは、降下する方法です。これを行う方法を決めたら、最新のファイルの経過時間を追跡するのは簡単です。大きなディレクトリにはしばらく時間がかかるので、再帰的な降下には注意してください。トレードオフのために、リンク先のページのさまざまなメソッドをすべて調べてから解決する必要があります。 「[ask]」をお読みください。問題を解決するためのあなたの努力を見なければなりません。何かをする方法を私たちに尋ねるのは時期尚早です。最初に研究し、試してみることになっています。 –

+0

私のオリジナルの質問を編集しました – aronlmin

答えて

2

あなたが指定したディレクトリとそのサブディレクトリ内のすべてのファイルのリストを見つけるために、Dir#globメソッドを使用し、その後、File#mtime方法を用いて得ることができる最終更新時刻の最高値を持つファイルを選ぶことができます。

Dir.glob("active/lvl1/**/*").max_by {|i| File.mtime(i)}