2013-08-02 102 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

相關問題