gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:36 24 4
gpt4 key购买 nike

这是我的脚本:

    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

当我运行脚本时,这是我得到的:

    + PTH=/data0101/track_logs
+ cd /data0101/track_logs
++ ls -lrth
++ grep IMEI_TRACK
++ wc -l
+ [[ 200 -gt 0 ]]
++ ls -lrth
++ grep IMEI_TRACK
++ wc -l
+ FILE_COUNT=200
++ date
++ awk '{print $6}'
+ YEAR=2012
+ mkdir /data0101/track_logs/2012
mkdir: cannot create directory `/data0101/track_logs/2012': File exists
++ date
++ awk '{print $2}'
+ MONTH=Dec
+ mkdir /data0101/track_logs/2012/Dec
mkdir: cannot create directory `/data0101/track_logs/2012/Dec': File exists
++ date
++ awk '{print $3}'
+ DAY=20
++ date
++ awk '{print $4}'
++ cut -d: -f 1
+ HOUR=14
+ [[ 14 -ne 0 ]]
+ HR=13
+ case $HR in

这清楚地表明该脚本没有比 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

但这也无济于事。

最佳答案

您需要分别检查每个数字,例如 [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

如果你只是把这个脚本放在你的 /etc/cron.hourly 文件夹中,你不需要检查小时,那么你的脚本看起来像这样:

#!/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" \;

关于linux - 用于在每小时文件夹中移动日志文件的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13968964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com