Linux shell ftp按照日期去下载文件的方法


本文摘自PHP中文网,作者巴扎黑,侵删。

最近做项目遇到这样的需求要求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、指定文件名,正则匹配


1

2

pattern="${month}.*.dat$"

ls -lrt |awk '$9 ~ /'$pattern'/ {print $6" "$7" "$8}'

注意awk里面模式变量用' '括起来,.*为任意字符,$表示以dat结尾。pattern的内容根据需求自行设定

4、对文件时间进行比较


1

2

3

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命令登录远程主机,并过滤得到要查询的文件内容


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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、下载文件


1

ftp_cmd mget $files

以上就是Linux shell ftp按照日期去下载文件的方法的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

Linux crond不执行的原因

Linux 在添加账号后无权限如何解决?

Linux下如何获取系统uuid

Linux如何联网

Linux如何安全配置mysql数据库

Linux下设置nginx开机自启的方法

如何进行centos7临时修改ip和永久修改ip

关于四种安全的内网实例互通设置方法

Linux换行符详解

Linux中如何删除乱码文件

更多相关阅读请进入《Linux》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...