Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 用于在每小时文件夹中移动日志文件的脚本_Linux_Bash_Shell_Unix_Scripting - Fatal编程技术网

Linux 用于在每小时文件夹中移动日志文件的脚本

Linux 用于在每小时文件夹中移动日志文件的脚本,linux,bash,shell,unix,scripting,Linux,Bash,Shell,Unix,Scripting,这是我的剧本: set -x PTH=/data0101/track_logs cd /data0101/track_logs if [[ `ls -lrth | grep IMEI_TRACK | wc -l` -gt 0 ]]; then FILE_COUNT=`ls -lrth | grep IMEI_TRACK | wc -l` YEAR=`date | awk '{print $6}'` mkdir

这是我的剧本:

    set -x

    PTH=/data0101/track_logs
    cd /data0101/track_logs

    if [[ `ls -lrth | grep IMEI_TRACK | wc -l` -gt 0 ]];
    then
       FILE_COUNT=`ls -lrth | grep IMEI_TRACK | wc -l`

       YEAR=`date | awk '{print $6}'`
       mkdir $PTH/$YEAR

       MONTH=`date | awk '{print $2}'`
       mkdir $PTH/$YEAR/$MONTH

       DAY=`date | awk '{print $3}'`

       HOUR=`date | awk '{print $4}' | cut -d":" -f 1`
       if [[ $HOUR -ne 0 ]];
       then
          HR=$(( $HOUR - 1 ))
       else
          DAY=$(( $DAY - 1 ))
          HR=23
          mkdir $PTH/$YEAR/$MONTH/$DAY
       fi
       case $HR  in
            00-23) for (( i=1;i<=$FILE_COUNT;i++ ))
                   do
                    chk=`ls -lrth | grep IMEI_TRACK | head -$i | tail -1 | awk '{print    $8}' | cut -d: -f1`
                    FILE=`ls -lrth | grep IMEI_TRACK |  awk '{print $9}'`
                    if [[ $chk -eq $HR ]];
                    then
                       mkdir $PTH/$YEAR/$MONTH/$DAY/$HR
                       mv $FILE $PTH/$YEAR/$MONTH/$DAY/$HR/
                    else
                       break
                    fi
                   done ;;


       esac
    fi
这清楚地表明,这个脚本并没有超出case语句的范围。我的案例结构有什么问题吗。请帮忙。此外,还欢迎对脚本的整体开发提出建议

我尝试在案例构造中使用范围,如下所示:

    case $HR  in
                [00-23]) for (( i=1;i<=$FILE_COUNT;i++ ))
                           do
                            chk=`ls -lrth | grep IMEI_TRACK | head -$i | tail -1 | awk '{print    $8}' | cut -d: -f1`
                            FILE=`ls -lrth | grep IMEI_TRACK |  awk '{print $9}'`
                            if [[ $chk -eq $HR ]];
                            then
                               mkdir $PTH/$YEAR/$MONTH/$DAY/$HR
                               mv $FILE $PTH/$YEAR/$MONTH/$DAY/$HR/
                            else
                               break
                            fi
                           done ;;


      esac
#!/bin/bash

PTH="/data0101/track_logs"
cd "$PTH"

DIR=$(date +"%Y/%m/%d/%H")
mkdir "$DIR"

find ./ -mtime -1 -name "*IMEI_TRACK*" -type f -exec mv "{}" "$DIR" \;
案例中的$HR

[00-23])对于((i=1;i您需要分别检查每个数字,如
[0-2][0-9]
,您还可以使用
find
而不是在文件上循环,
mkdir
-p
选项来创建父目录(如有必要),并使用
read
进行多变量赋值:

#!/bin/bash

PTH="/data0101/track_logs"
cd "$PTH"

if [[ $(ls -lrth | grep IMEI_TRACK | wc -l) -gt 0 ]]; then
    DATE=$(date +"%Y %m %d %H")
    DIR=${DATE// /\/}
    read YEAR MONTH DAY HOUR <<<$DATE

    case $HOUR  in
        [0-2][0-9]) mkdir -p "$DIR"
                    find ./ -mtime -1 -name "*IMEI_TRACK*" -type f -exec mv "{}" "$DIR" \;;;

    esac
fi

您需要分别检查每个数字,例如
[0-2][0-9]
,您还可以使用
find
而不是在文件上循环,
mkdir
使用
-p
选项创建父目录(如果需要),以及使用
read
进行多变量赋值:

#!/bin/bash

PTH="/data0101/track_logs"
cd "$PTH"

if [[ $(ls -lrth | grep IMEI_TRACK | wc -l) -gt 0 ]]; then
    DATE=$(date +"%Y %m %d %H")
    DIR=${DATE// /\/}
    read YEAR MONTH DAY HOUR <<<$DATE

    case $HOUR  in
        [0-2][0-9]) mkdir -p "$DIR"
                    find ./ -mtime -1 -name "*IMEI_TRACK*" -type f -exec mv "{}" "$DIR" \;;;

    esac
fi

这是我最后的剧本:

    cd /data0101/track_logs

    if [[ `ls -lrth | grep IMEI_TRACK | wc -l` -gt 0 ]];
    then
       FILE_COUNT=`ls -lrth | grep IMEI_TRACK | wc -l`
       YEAR=`date | awk '{print $6}'`
       MONTH=`date | awk '{print $2}'`
       DAY=`date | awk '{print $3}'`
       HOUR=`date | awk '{print $4}' | cut -d":" -f 1`
       if [[ "$HOUR" -ne 0 ]];
       then
          HR=$(( $HOUR - 1 ))
       else
          DAY=$(( $DAY - 1 ))
          HR=23
       fi

       case $HR in
                 [0-9]) for (( i=1;i<=$FILE_COUNT;i++ ))
                          do
                           chk_hr=`ls -lrth | grep IMEI_TRACK | head -$i | tail -1 | awk '{print $8}' | cut -d: -f1`
                           chk_day=`ls -lrth | grep IMEI_TRACK | head -$i | tail -1 | awk '{print $7}'`
                           FILE=`ls -lrth | grep IMEI_TRACK | head -$i | tail -1 |  awk '{print $9}'`
                           if [[ $chk_hr -eq $HR && $chk_day -eq $DAY ]];
                           then
                              mkdir -p $DIR_PATH/$YEAR/$MONTH/$DAY/$HR
                              mv $FILE $DIR_PATH/$YEAR/$MONTH/$DAY/$HR/
                           fi
                          done ;;
                 [1-2][0-9]) for (( i=1;i<=$FILE_COUNT;i++ ))
                               do
                                chk_hr=`ls -lrth | grep IMEI_TRACK | head -$i | tail -1 | awk '{print $8}' | cut -d: -f1`
                                chk_day=`ls -lrth | grep IMEI_TRACK | head -$i | tail -1 | awk '{print $7}'`
                                FILE=`ls -lrth | grep IMEI_TRACK |  head -$i | tail -1 | awk '{print $9}'`
                                if [[ $chk_hr -eq $HR && $chk_day -eq $DAY ]];
                                then
                                   mkdir -p $DIR_PATH/$YEAR/$MONTH/$DAY/$HR
                                   mv $FILE $DIR_PATH/$YEAR/$MONTH/$DAY/$HR/
                                fi
                               done ;;
        esac
    fi
enter code here
cd/data0101/track\u日志
如果[`ls-lrth | grep IMEI|u TRACK | wc-l`-gt 0];
然后
FILE|u COUNT=`ls-lrth | grep IMEI|u TRACK | wc-l`
年份=`date | awk'{print$6}'`
月份=`date | awk'{print$2}'`
DAY=`date | awk'{print$3}'`
HOUR=`date | awk'{print$4}'| cut-d:'-f 1`
如果[[“$HOUR”-ne 0]];
然后
人力资源=$($小时-1))
其他的
日=$($日-1))
HR=23
fi
案例中的$HR

[0-9])对于((i=1;i这是我最后的脚本:

    cd /data0101/track_logs

    if [[ `ls -lrth | grep IMEI_TRACK | wc -l` -gt 0 ]];
    then
       FILE_COUNT=`ls -lrth | grep IMEI_TRACK | wc -l`
       YEAR=`date | awk '{print $6}'`
       MONTH=`date | awk '{print $2}'`
       DAY=`date | awk '{print $3}'`
       HOUR=`date | awk '{print $4}' | cut -d":" -f 1`
       if [[ "$HOUR" -ne 0 ]];
       then
          HR=$(( $HOUR - 1 ))
       else
          DAY=$(( $DAY - 1 ))
          HR=23
       fi

       case $HR in
                 [0-9]) for (( i=1;i<=$FILE_COUNT;i++ ))
                          do
                           chk_hr=`ls -lrth | grep IMEI_TRACK | head -$i | tail -1 | awk '{print $8}' | cut -d: -f1`
                           chk_day=`ls -lrth | grep IMEI_TRACK | head -$i | tail -1 | awk '{print $7}'`
                           FILE=`ls -lrth | grep IMEI_TRACK | head -$i | tail -1 |  awk '{print $9}'`
                           if [[ $chk_hr -eq $HR && $chk_day -eq $DAY ]];
                           then
                              mkdir -p $DIR_PATH/$YEAR/$MONTH/$DAY/$HR
                              mv $FILE $DIR_PATH/$YEAR/$MONTH/$DAY/$HR/
                           fi
                          done ;;
                 [1-2][0-9]) for (( i=1;i<=$FILE_COUNT;i++ ))
                               do
                                chk_hr=`ls -lrth | grep IMEI_TRACK | head -$i | tail -1 | awk '{print $8}' | cut -d: -f1`
                                chk_day=`ls -lrth | grep IMEI_TRACK | head -$i | tail -1 | awk '{print $7}'`
                                FILE=`ls -lrth | grep IMEI_TRACK |  head -$i | tail -1 | awk '{print $9}'`
                                if [[ $chk_hr -eq $HR && $chk_day -eq $DAY ]];
                                then
                                   mkdir -p $DIR_PATH/$YEAR/$MONTH/$DAY/$HR
                                   mv $FILE $DIR_PATH/$YEAR/$MONTH/$DAY/$HR/
                                fi
                               done ;;
        esac
    fi
enter code here
cd/data0101/track\u日志
如果[`ls-lrth | grep IMEI|u TRACK | wc-l`-gt 0];
然后
FILE|u COUNT=`ls-lrth | grep IMEI|u TRACK | wc-l`
年份=`date | awk'{print$6}'`
月份=`date | awk'{print$2}'`
DAY=`date | awk'{print$3}'`
HOUR=`date | awk'{print$4}'| cut-d:'-f 1`
如果[[“$HOUR”-ne 0]];
然后
人力资源=$($小时-1))
其他的
日=$($日-1))
HR=23
fi
案例中的$HR

[0-9])对于((i=1;只检查一个HR值:这是
00-23
。这不代表一个范围。有关提示,请参阅问题。只检查一个HR值:这是
00-23
。这不代表一个范围。有关提示,请参阅问题。您可能还需要一个线性版本
cd”/data0101/track_logs“&&mkdir-p$(日期)+“%Y/%m/%d/%H”)和&find./-mtime-1-name“*IMEI\u TRACK*”-type f-exec mv“{}”“$\
您可能还需要1行程序版本
cd”/data0101/TRACK\u logs”和&mkdir-p$(date+“%Y/%m/%d/%H”)&和&find./-mtime-1-name“*IMEI\u TRACK*”-type f-exec mv“{