Linux shell ftp命令下载文件 根据文件日期

Posted One-Way

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 



以上是关于Linux shell ftp命令下载文件 根据文件日期的主要内容,如果未能解决你的问题,请参考以下文章

linux shell脚本的循环下载

Linux使用Shell脚本实现ftp的自动上传下载

Linux系统中使用lftp命令实现FTP上传下载

linux下用ftp命令连接到ftp服务器应该如何查看服务器上的目录文件数

用shell的linux服务器 .sh插件怎么从远程ftp服务器下载文件

FTP下载文件