我是Unix Shell脚本的新手。我需要将文件保留一个月的保留期并归档其他文件。
示例:
文件格式:WE20160225.log(20160225 YYYYMMDD)
在目录/ oracle / Sales中说有3个文件:
WE20160130.log
WE20151201.log
WE20151109.log
我需要tar.gz WE20151201.log和WE20151109.log
但不是WE20160130.log,因为该文件距离现在还不到一个月。我怎样才能做到这一点? (可能需要对文件名进行子串)
我可以更改目录,但不知道接下来该做什么。我的逻辑是循环遍历文件并从文件中对日期进行子字符串并检查当前日期
我需要使用文件名日期,而不是文件修改日期。
SALES_DIR="/oracle/sales/"
cd $SALES_DIR
答案 0 :(得分:2)
可能是这样的:
list=`ls *.log`
limit=`date --date 'Last Month' +%Y%m%d`
for filename in $list
do
if [ ${filename:2:8} -lt $limit ]
then
tar -czf "$filename.tar.gz" $filename
fi
done;
答案 1 :(得分:2)
您可以使用此for
循环:
curr=$(date '+%s')
for file in WE*.log; do
f="${file%.*}"
ts=$(date -d "${f:2}" '+%s')
(( (curr - ts) > 30*86400 )) && echo "$file"
done | tar cvzf backup.tgz -T-
基本上我们以unix秒获取当前日期时间,然后从文件中提取日期并使用date
找到它的EPOCH(unix ts)值。
最后,我们将2个时间戳的差异与30*86400
(30天)进行比较并打印文件名。整个事情通过管道传递给tar
命令来创建tar压缩文件。