需求: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 \""$" "$" "$"\" +%Y%m%d%H%M"; \
ctime|getline filetime; if( filetime > '$checktime' ) print $ ; }

获取文件的时间,对时间进行转换,然后对转换后的时间与给定的$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 \""$" "$" "$"\" +%Y%m%d%H%M"; \
ctime|getline filetime; if( filetime > '$checktime' ) print $ ; }'|xargs)

通过函数调用实现ftp到指定主机,cd到指定目录,通过awk获取ls -lrt的结果,然后计算时间,把大于指定时间的文件名获取到。

6、下载文件

ftp_cmd mget $files

注意:如果匹配的文件量过大,采用这种方法下载文件有bug, 可以考虑分批下载,也就是一次下载几个文件。

7、时间点校验

通常时间点信息为参数,所以要对时间点信息进行校验。这里提供一个简单的校验方法:

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

解析时间,如果失败则退出。

注意:时间精度到分的 值的格式为:'20170910 1600'

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

  • 自加
 num=$[ $num +  ];
  • 为空判断
if [ "$pro"x == ""x ]; then
  ...
fi

  如果不加x,当$pro为空的时候,会报异常

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

Linux shell ftp命令下载文件 根据文件日期的更多相关文章

  1. Linux使用Aria2命令下载BT种子/磁力/直链文件 转载

    Linux使用Aria2命令下载BT种子/磁力/直链文件 博主: Rat's 发布时间:2017 年 10 月 10 日 26725 次浏览 8 条评论 1073 字数 分类:主机教程 首页 正文 分 ...

  2. 利用windows系统ftp命令编写的BAT文件上传[转]

    利用windows系统ftp命令编写的BAT文件上传[转] 利用windows系统ftp命令编写的BAT文件上传[转] 在开发中往往需要将本地的程序上传到服务器,而且用惯了linux命令的人来说.在w ...

  3. Linux下面使用命令如何运行.sh文件的两种解决办法

    Linux下面用命令如何运行.sh文件的方法,有两种方法: 一.直接./加上文件名.sh,如运行hello.sh为./hello.sh[hello.sh必须有x权限] 二.直接sh 加上文件名.sh, ...

  4. Linux shell 中提取zip或jar文件中的某个文件

    Linux shell 中提取zip或jar文件中的某个文件 假如有个压缩包 abc.jar, 里面文件如下 (可以用unzip -l abc.jar 查看): data/1.txt data/2.t ...

  5. linux:使用comm命令比较两个文件:交集、差

    linux:使用comm命令比较两个文件:交集.差 comm命令可以按行比较两个排序好的文件,输出有3列:第一列是file1独有的.第二列是file2独有的,第三列是两者都有的,简单语法如下:NAME ...

  6. Linux shell tr 命令详解

    该随笔摘自 https://www.jb51.net/article/103892.htm Linux shell tr 命令详解 1. 用途 tr,translate的简写,主要用于压缩重复字符,删 ...

  7. python文件读写操作与linux shell变量命令交互执行

    python对文件的读写还是挺方便的,与linux shell的交互变量需要转换一下才能用,这比较头疼! #coding=utf-8 #!/usr/bin/python import os impor ...

  8. ubuntu 下通过ftp命令下载文件

    /*连接*/ $ ftp 192.168.180.2Connected to 192.168.180.2.Name (192.168.180.2:rivsidn): admin  Password: ...

  9. 2.3 利用FTP服务器下载和上传文件

    二.利用FTP服务器的下载文件 from ftplib import FTP from os.path import exists def getfile(file,site,dir,user=(), ...

随机推荐

  1. 2017-07-29 中文代码示例教程之Java编程一天入门

    Java编程一天入门 v0.0.1 alpha 共享协议 本作使用署名-非商业使用-禁止演绎协议共享. 前言 Java入门代码用中文写(举例如下)更能被新手理解. 由于至今没有看到类似教程, 在此抛砖 ...

  2. 【读书笔记】iOS-优化内存

    imageNamed:方法创建UIImage对象,这些对象不再使用的时候 会放到应用的默认自动回收池中,而不是当前的事件循环的自动回收池中,这样的对象占用的内存只有在应用结束的时候 才会回收.如果用这 ...

  3. 长文本溢出显示省略号(…) text-overflow: ellipsis

    text-overflow 属性规定当文本溢出包含元素时发生的事情. 默认值: clip 继承性: no 版本: CSS3 JavaScript 语法: object .style.textOverf ...

  4. Javascript异步编程之三Promise: 像堆积木一样组织你的异步流程

    这篇有点长,不过干货挺多,既分析promise的原理,也包含一些最佳实践,亮点在最后:) 还记得上一节讲回调函数的时候,第一件事就提到了异步函数不能用return返回值,其原因就是在return语句执 ...

  5. Android项目实战(三十二):圆角对话框Dialog

    前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话框的"确定"按钮 难点:1.对话框边框圆角 ...

  6. iOS开发-本地存储(偏好设置,Plist,归档)

    1.   NSUserDefaults //TODO: 1.NSUserDefaults NSUserDefaults类除了可以存储数组.字典.NSdata外,还可以直接存储OC基本类型属性.但是不能 ...

  7. Fiddler抓包使用教程-QuickExec

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/73468287 本文出自[赵彦军的博客] 在 Fiddler 中自带了一个 Quic ...

  8. 常用的Git命令整理

    之前一直忙于项目苦于没有时间总结,今天刚好有时间特来总结一下在工作中常用到的代码版本管理器Git.至于为什么要用Git?Git相比SVN有哪些好处?我就不多说了,前人已经总结的很好.今天主要介绍的是常 ...

  9. mysql中的utf8mb4、utf8mb4_unicode_ci、utf8mb4_general_ci

    1.utf8与utf8mb4(utf8 most bytes 4) MySQL 5.5.3之后增加了utfmb4字符编码 支持BMP(Basic Multilingual Plane,基本多文种平面) ...

  10. Appium学习——安装appium Server

    安装appium Server 下载地址:百度网盘的下载链接:https://pan.baidu.com/s/1pKMwdfX 下载后, AppiumForWindows.zip 进行解压,点击 ap ...