2013-08-02 171 views
2

我需要获取服务器上一组文件的修改时间。我知道如何在本地计算机上获取此文件,但File.mtime无法通过FTP工作。我将如何将此代码转换为在服务器上工作?获取FTP服务器上文件的修改时间

files_sorted_by_time = Dir['*'].select { |f| 
    ((Time.now - File.mtime(f)).to_i/604800) < 7 
} 
+2

'File.mtime'对*文件*有效。你打算如何通过FTP使用它? – tadman

+0

我正在制作一个脚本,用于下载上周已上传的flv文件,将它们转换为mp4并重新上传。 – Chase

+0

当您下载文件时,它将在您下载它的那一刻创建。某些FTP客户端经历了从服务器获取修改时间并将其应用于下载文件的麻烦,但如果您要在Ruby中进行下载,则必须有意识地执行此操作。 FTP的日期和时间格式几乎为零*标准,编写一个全功能的FTP客户端确实令人沮丧和困难。如果你可以使用SCP,你的生活将会变得无比美好。 – tadman

回答

4

你想要Net::FTP#mtime。从文档

例子:

Net::FTP.open('ftp.netlab.co.jp') do |ftp| 
    ftp.login 
    files = ftp.chdir('pub/lang/ruby/contrib') 
    files = ftp.list('n*') 
    ftp.getbinaryfile('nif.rb-0.91.gz', 'nif.gz', 1024) 
    ftp.mtime('file.pdf') 
end 

您可以使用#mtime#nlst通过远程文件列表进行过滤。

Net::FTP.open('ftp.netlab.co.jp') do |ftp| 
    ftp.login 
    ftp.nlst do |file| 
    if ftp.mtime(file) # ... 
    end 
end 
+0

有没有办法在服务器上获取文件的mtime,并且只能在过去一周内下载这些文件? – Chase

+0

我刚刚试过你给我的代码,它给了一个巨大的错误。我在这里发布了代码和错误http://pastebin.com/Da97cJg4 – Chase

+0

我删除了行ftp.login,但我仍然在Net :: FTP.open(bla,bla,bla)的行上出现错误| ftp | – Chase

相关问题