我想按日期将超过两天的日志文件移动到新目录,如下所示。
来源:
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
尽管如果日志文件不以文字开头,以及排除不符合模式的文件,则需要进行一些改进。