• 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
  • 相关阅读:
    CentOS关闭防火墙
    CentOS 7升级Python到3.5后yum出错
    Windows本地Linux虚拟机ping不通的解决办法
    xshell上传下载文件(Windows、Linux)
    tensorflow,torch tips
    svn tips
    torch lua tips
    ios oc调用swift framework
    ios dyld: Library not loaded: @rpath/xxx.framework/xxx 之根本原因
    xcode,git tips
  • 原文地址:https://www.cnblogs.com/one--way/p/7526620.html
Copyright © 2020-2023  润新知