2010-07-02 38 views

回答

12

我認爲這是相當簡單:

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

除非您的所有文件都有擴展名,否則您可能需要將文件格式更改爲'*'。請注意,以。開頭的文件。將不會被視爲 – 2010-07-02 17:35:23

+2

速記版本:'Dir [File.join(path,'*。*')]。max_by(&File.method(:ctime))' – Raindal 2014-07-17 15:48:22

1

您可以使用dir類列出所有文件並檢查文件對象的ctime或atime(ctime是上次更改文件的時間,atime是上次訪問文件的時間)

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

如何訂購該foreach?我只想使用最近ctime的文件路徑。 – 2010-07-02 13:56:09

+1

使用sort_by {| f | f.ctime(f)} – 2010-07-02 14:09:18

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

Dir.glob(root_path + 「。」){.MAP |文件| [文件,File.ctime(文件)]}。max.first

0

我在railsapp/config/initializers裏面添加了這個方法到我的supermanpatches.rb文件中,打開我最近生成的遷移(在TextMate中),而不必複製和粘貼文件名或任何東西這樣的:

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

和匕首;:(FYI爲的Ruby/Rails初學者,初始化代碼是無所不在的,不需要類到文件名的作用域可訪問從內軌道的任何地方)

注意:在Windows (或mac),您可以使用vim命令而不是mate命令,並且s ublimetext也可以配置成這樣做,我認爲它叫做subl命令。 mate & subl默認情況下不工作,但我認爲,所以你必須先設置它

相關問題