shell腳本---定時(shí)復(fù)制文件至目的文件夾

業(yè)務(wù)需求:定時(shí)從path1中取文件,復(fù)制到path2中

復(fù)制文件腳本

#! /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 進(jìn)入源文件夾目錄,其實(shí)可以直接find里面加路徑參數(shù)

  2. find -iname "*.txt" -type f -mmin $timelimit2 -a -mmin $timelimit1
    深入了解find命令
    找出txt格式(-iname "*.txt")的文件(-type f),修改時(shí)間(-mmin)是前timelimit1分鐘 至前 timelimit2分鐘 之間(-a 并且)的這段時(shí)間(注意這里時(shí)間的正負(fù)的含義,+表示前幾分鐘之前,-表示前幾分鐘之內(nèi))

  3. awk '{print substr($1,3)}' 2中獲取的結(jié)果是一列字符串,每一行是“./*.txt”這種形式,利用awk處理這些字符即取第一列($1)取子串第3個(gè)字符及后續(xù)
    最終輸出結(jié)果是n行字符('\n'分割)組成的一串字符串(并非n行的列表

既然上述命令輸出的是一串字符串,則不可避免需要做切割。
對(duì)于一行字符串str="aaa,bbb,vvv,ccc"
直接利用${str[@]}就可以獲得分割后的列表。那么,如何定義分隔符呢?
IFS=$','
IFS是系統(tǒng)自帶的一個(gè)變量,儲(chǔ)存著分隔符,默認(rèn)好像是空格??梢宰远x
上面腳本中就是定義了IFS為換行符。
腳本后半部分就是依次處理文件,判斷目標(biāo)文件夾是否已有該文件,如果沒(méi)有,就復(fù)制。

使用crontab做定時(shí)任務(wù)

項(xiàng)目中源文件夾的文件是每個(gè)幾分鐘會(huì)增加一個(gè),相當(dāng)于上述腳本要每隔一段時(shí)間運(yùn)行一次,以確保源文件夾和目標(biāo)文件夾里的內(nèi)容同步。
crontab講解1
crontab講解2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.創(chuàng)建文件夾 !/bin/sh mkdir -m 777 "%%1" 2.創(chuàng)建文件 !/bin/sh touch...
    BigJeffWang閱讀 10,488評(píng)論 3 53
  • .bat腳本基本命令語(yǔ)法 目錄 批處理的常見(jiàn)命令(未列舉的命令還比較多,請(qǐng)查閱幫助信息) 1、REM 和 :: 2...
    慶慶慶慶慶閱讀 8,532評(píng)論 1 19
  • 為何叫做 shell ? shell prompt(PS1) 與 Carriage Return(CR) 的關(guān)系?...
    Zero___閱讀 3,321評(píng)論 3 49
  • 第1章 小試牛刀 $ 是普通用戶,# 表示管理員用戶 root。 shebang:#!。sharp / hash ...
    巴喬書(shū)摘閱讀 6,658評(píng)論 1 4
  • 轉(zhuǎn)載 原文的排版和內(nèi)容都更加友好,并且詳細(xì),我只是在這里貼出了一部分留作自己以后參考和學(xué)習(xí),如希望更詳細(xì)了解AWK...
    XKirk閱讀 3,365評(píng)論 2 25

友情鏈接更多精彩內(nèi)容