移动超过 2 天的日志文件

移动超过 2 天的日志文件

我想按日期将超过两天的日志文件移动到新目录,如下所示。

来源:

1) /Test1/Server.log
2) /Test1/Server17032016.log

目的地:

1)/Test2/17032016/Server17032016.log

按日期创建目录并将文件移动到那里。

答案1

我建议您不要使用修改日期执行备份。

您不想在实际备份的当天对备份进行排序吗?

我知道我会的。

我会这样解决问题

#!/bin/sh

targetDirectory=$2

for file in $1; do 
    if [ -f "$file" ]; then
        if [ $(((`date +%s` - `stat -L --format %Y $file`) > (172800))) -eq 1 ]; then
                today=$(date +"%Y%m%d")
                mkdir -p "$targetDirectory"
                mkdir -p "$targetDirectory/$today"
                mv $file "$targetDirectory/$today"
                echo "$file moved to $targetDirectory/$today/$file"
        fi
    fi
done

(神奇数字 172800,是以秒为单位的 2 天。)

像这样运行脚本:$ ./movebackup.sh "/Logfolder/*.log" Backups

输出

Server.log moved to Backups/20160319/Server.log
Server17032016.log moved to Backups/20160319/Server17032016.log

每天午夜在 cronjob 中运行它。

答案2

OP显然期望像这样的路径名

 /Test1/Server17032016.log

被解释为好像文件名中的最后 8 位数字是日期(月份、月份和年份),并且希望从该日期派生目录名称。

给定数据的脚本可能如下所示:

#!/bin/sh
find /Test1 -type f -mtime +2 | while IFS= read -r name
do
    date=$(echo "$name" | sed -e 's,^/Test1/Server,,' -e 's,\.log$,,' )
    [ -z "$date" ]          && continue
    [ "x$date" = "x$name" ] && continue
    mkdir -p /Test2/"$date"
    mv -f "$name" /Test2/"$date/"
done

Server尽管如果日志文件不以文字开头,以及排除不符合模式的文件,则需要进行一些改进。

相关内容