美文网首页Linux
shell脚本---定时复制文件至目的文件夹

shell脚本---定时复制文件至目的文件夹

作者: 莱昂纳多91 | 来源:发表于2018-02-06 14:31 被阅读235次

业务需求:定时从path1中取文件,复制到path2中

复制文件脚本

#! /bin/bash
path1="/newhd01/ulog_winup/"
path2="/newhd01/ulog_winup/real_for_flume/"
timelimit1="+6"
timelimit2="-17"
for i in "Search" "Download" "Browse"; do
        list_newfiles=`cd $path1$i && find -iname "*.txt" -type f -mmin $timelimit2 -a -mmin $timelimit1 | awk '{print substr($1,3)}'`
        echo ""
        echo "target folder: $path2${i}1"
        echo "Trying to copy those files in $path1$i"
        echo "$list_newfiles"
        echo ""
        OLD_IFS=$IFS
        IFS=$'\n'
        arr_newfiles=($list_newfiles)
        for s in ${arr_newfiles[@]}; do
                #echo "$s"
                isfindthisfile=`find $path2${i}1 -iname $s`
                if [ -z "$isfindthisfile" ]; then
                        echo "$path1$i/$s is not in target folder,try to copy!"
                        cp "$path1$i/$s" "$path2${i}1/$s.TMP"
                        mv "$path2${i}1/$s.TMP" "$path2${i}1/$s"
                        echo "$path1$i/$s has been moved successfully!!!"
                else
                        echo "$path1$i/$s is allready in target folder,trying to copy next !"
                fi
        done
done
IFS=$OLD_IFS

主要解释第7行

list_newfiles=`cd $path1$i && find -iname "*.txt" -type f -mmin $timelimit2 -a -mmin $timelimit1 | awk '{print substr($1,3)}'`

分3部分:

  1. cd $path1$i 进入源文件夹目录,其实可以直接find里面加路径参数

  2. find -iname "*.txt" -type f -mmin $timelimit2 -a -mmin $timelimit1
    深入了解find命令
    找出txt格式(-iname "*.txt")的文件(-type f),修改时间(-mmin)是前timelimit1分钟 至前 timelimit2分钟 之间(-a 并且)的这段时间(注意这里时间的正负的含义,+表示前几分钟之前,-表示前几分钟之内)

  3. awk '{print substr($1,3)}' 2中获取的结果是一列字符串,每一行是“./*.txt”这种形式,利用awk处理这些字符即取第一列($1)取子串第3个字符及后续
    最终输出结果是n行字符('\n'分割)组成的一串字符串(并非n行的列表

既然上述命令输出的是一串字符串,则不可避免需要做切割。
对于一行字符串str="aaa,bbb,vvv,ccc"
直接利用${str[@]}就可以获得分割后的列表。那么,如何定义分隔符呢?
IFS=$','
IFS是系统自带的一个变量,储存着分隔符,默认好像是空格。可以自定义
上面脚本中就是定义了IFS为换行符。
脚本后半部分就是依次处理文件,判断目标文件夹是否已有该文件,如果没有,就复制。

使用crontab做定时任务

项目中源文件夹的文件是每个几分钟会增加一个,相当于上述脚本要每隔一段时间运行一次,以确保源文件夹和目标文件夹里的内容同步。
crontab讲解1
crontab讲解2

相关文章

网友评论

    本文标题:shell脚本---定时复制文件至目的文件夹

    本文链接:https://www.haomeiwen.com/subject/jdrgzxtx.html