Linux shell ftp命令下載檔案 根據檔案日期,
需求:ftp擷取遠端資料的檔案,根據檔案的建立時間點下載檔案。 可以自行擴充根據檔案的大小等其他需求。
知識點總結:
1、擷取檔案的時間:
ls -lrt|awk '{print $6" "$7" "$8}'
時間內容:
Sep 8 16:03
2、時間格式轉換
date -d "Sep 8 16:03" +%Y%m%d%H%M
轉換結果:
201709081603
3、指定檔案名稱,正則匹配
pattern="${month}.*.dat$"ls -lrt |awk '$9 ~ /'$pattern'/ {print $6" "$7" "$8}'
注意awk裡面模式變數用' '括起來,.*為任一字元,$表示以dat結尾。pattern的內容根據需求自行設定
4、對檔案時間進行比較
ls -lrt |awk '$9 ~ /'$pattern'/ {\ ctime="date -d \""$6" "$7" "$8"\" +%Y%m%d%H%M"; \ ctime|getline filetime; if( filetime > '$checktime' ) print $9 ; }
擷取檔案的時間,對時間進行轉換,然後對轉換後的時間與給定的$checktime進行比較,如果比$checkime的時間大,則顯示檔案名稱。
|getline 為執行命令擷取命令執行的結果。
以上就完成了對本地檔案時間進行比較的方法。接下來判斷遠程主機的檔案時間。
5、ftp命令登入遠程主機,並過濾得到要查詢的檔案內容
ftp_cmd(){ftp -i -n <<!open $ftp_ipuser $get_user $get_pwdbinarycd ${get_dir}lcd ${local_dir}$*bye!}
pattern="${month}.*.dat$"
files=$(ftp_cmd ls -lrt |awk '$9 ~ /'$pattern'/ {\
ctime="date -d \""$6" "$7" "$8"\" +%Y%m%d%H%M"; \
ctime|getline filetime; if( filetime > '$checktime' ) print $9 ; }'|xargs)
通過函數調用實現ftp到指定主機,cd到指定目錄,通過awk擷取ls -lrt的結果,然後計算時間,把大於指定時間的檔案名稱擷取到。
6、下載檔案
ftp_cmd mget $files