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_ip
user $get_user $get_pwd
binary
cd ${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

注意:如果匹配的文件量過大,采用這種方法下載文件有bug, 可以考慮分批下載,也就是一次下載幾個文件。

 

7、時間點校驗

通常時間點信息為參數,所以要對時間點信息進行校驗。這里提供一個簡單的校驗方法:

date -d "${time}"  +%Y%m%d%H%M
if [ $? -ne 0 ]; then
    echo "time invalidate";
    exit 2
fi

解析時間,如果失敗則退出。

注意:時間精度到分的 值的格式為:'20170910 1600'

 

講講其他shell命令注意的地方:

  • 自加
 num=$[ $num + 1 ];
  • 為空判斷
if [ "$pro"x == ""x ]; then
  ...
fi

  如果不加x,當$pro為空的時候,會報異常

  • if的多條件判斷 -o
if [ "$pro"x == "$province"x -o "$pro"x == ""x ];then
...
fi

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM