應該有很多朋友知道,用 FTP 下載檔案的時候,可以設定「保留下載檔案的日期 / 時間」。例如如果妳用的 FTP client 是 FileZilla 這個跨平台的自由軟體(以 2.2.32 版為例):

編輯 > 設定 > 檔案傳輸設定 > 保留下載檔案的日期 / 時間
Edit > Settings > File transfer settings > Preserve date/time of downloaded files

設定是很簡單,其他的 FTP client 軟體也都有這個設定,一般人知道怎麼設定(自己用的 FTP 軟體)也就夠了。

但是,原理是什麼呢?

我用 ftp preserve date/time of downloaded files 去 Google 撈過來撈過去……

原來,這是取決於伺服器端的,如果妳連上的 FTP server 有支援 MDTM 這個功能,那妳只要在 FTP client 端設定一下,就可以保留下載檔案的日期 / 時間囉。

嗯,既然是通訊協定,一定在某一份 RFC 裡面有定義才是,這次改用 rfc ftp mdtm 撈,就撈到 RFC 3659 ,其中就有 File Modification Time (MDTM) 的定義

要怎麼知道妳連上的 FTP 伺服器有支援這個功能呢?很簡單,只要下 FEAT 指令,看看有沒有這個 FEATure 。底下是我用 MS Windows XP 的 command prompt ,連上某個 ftp 站之後,下指令的結果:

ftp> quote FEAT
211-Features:
EPRT
EPSV
MDTM
PASV
REST STREAM
SIZE
TVFS
211 End
ftp> quote SYST
215 UNIX Type: L8
ftp> quote HELP
214-The following commands are recognized.
ABOR ACCT ALLO APPE CDUP CWD DELE EPRT EPSV FEAT HELP LIST MDTM MKD
MODE NLST NOOP OPTS PASS PASV PORT PWD QUIT REIN REST RETR RMD RNFR
RNTO SITE SIZE SMNT STAT STOR STOU STRU SYST TYPE USER XCUP XCWD XMKD
XPWD XRMD
214 Help OK.
ftp> quote MDTM welcome.msg
213 20080613045501
ftp>


嗯,所以我們可以這樣取得 welcome.msg 這個檔案的時間戳記 (timestamp) 。不過,微軟提供的 ftp.exe 比較陽春,並沒有內建保留下載檔案的日期 / 時間這樣的功能,所以妳可以考慮使用 FileZilla 。如果一定要在命令列模式實現這樣的功能,可以考慮下載 NcFTP 的 MS Windows 版本,或者寫個 script 來控制 ftp.exe 。

==
喔,如果是 FileZilla 3.X 的話,這個設定放在:
傳輸 > 保留傳輸檔案的時間戳記
Transfer > Preserve timestamps of transferred files

======
有沒有發現,我們一直都在談「下載檔案」,那,用 FTP 上傳檔案,能不能保留檔案的日期 / 時間呢?有一些軟體拿 MDTM 來做這個功能,其實是不符合 RFC 3659的。比較正式的規範,目前應該是要用 MFMT 來做:

目前有份 IETF draft 提到 MFMT (Modify Fact: Modification Time), FileZilla FTP server 0.9.25 有支援這個功能,如果妳用的 FTP client 也有這個功能,就可以實現「保留上傳檔案的日期 / 時間」

FileZilla 團隊有整理了 File Transfer Protocol 相關的文件。

==
為了答謝一直看到這裡的朋友,低調的提一下 Filezilla Password Recover :p

(本文原載於 http://blog.roodo.com/ystuan/archives/6171547.html

互联网规模的超融合平台

什么是互联网规模?什么是web scale风格?看下Nutanix的亮点。 阅读全文

2017DevOps采用和趋势现状-信息图

Published on February 11, 2017