-1

我正在尝试做一些开发操作。我需要获取目录中最后修改的文件以将文件名传递给另一个命令。

如果我有一个用ls -laRuby 输出的文件列表:

-rw-r--r--  1  163929215 2012-11-26 00:02 appname_20121126_000002.tgz
-rw-r--r--  1  164051752 2012-11-27 00:02 appname_20121127_000002.tgz
-rw-r--r--  1  164160113 2012-11-28 00:02 appname_20121128_000002.tgz
-rw-r--r--  1  164284597 2012-11-29 00:02 appname_20121129_000004.tgz
-rw-r--r--  1  164342795 2012-11-30 00:02 appname_20121130_000003.tgz
-rw-r--r--  1  164448312 2012-12-01 00:02 appname_20121201_000003.tgz
-rw-r--r--  1  164490727 2012-12-02 00:02 appname_20121202_000002.tgz
-rw-r--r--  1  164546124 2012-12-03 00:02 appname_20121203_000001.tgz
-rw-r--r--  1  164594711 2012-12-04 00:02 appname_20121204_000002.tgz

我怎么能用 Ruby 扫描这个并提取最后一个文件?

这样的事情甚至可能吗?

4

1 回答 1

4

根本不需要掏空ls和解析它的输出。Ruby 为您提供了标准库方法来获取目录内容并检查文件 mtimes。这是一个 ruby​​ 方法,用于返回具有最新 mtime 的目录中的文件名。

def last_modified_in dir
  Dir.glob( File.join( dir,'*' ) ).
  select  {|f| File.file? f }.
  sort_by {|f| File.mtime f }.
  last
end

irb> system 'mkdir -p /tmp/foo'
irb> system 'rm /tmp/foo/*'
irb> ('a'..'c').each { |f| system "touch /tmp/foo/#{f}"; sleep 1; }
irb> puts last_modified_in '/tmp/foo'
# => /tmp/foo/c
于 2012-12-05T21:41:33.090 回答