将文件压缩并移动到相应的目录

时间:2016-08-09 09:02:22

标签: bash shell scripting sh

请帮忙解决这个问题,

我有一个每天都有日志的文件夹,所以我的目标是tar并压缩文件,并在第二天使用cron移动到单独的目录。

***所有日志都以“server.log.2016-08-08”(server.log.year-month-date)格式保存

为了找到我使用的文件for i in

find . -type f -name server.log.$(date "+%Y-%m-%d" -d '1 day ago')

如果当天是2016-08-09,它会找到昨天的服务器日志(server.log.2016-08-07)

***然后为了压缩它,我使用了do tar -czvf server.log.$(date "+%B-%m-%d" -d '1 day ago').tar.gz $i --remove-files

****我的文件夹是1月,2月...... 12月的路径/ opt / Solartis_Monitoring / logsbackup /(jan,feb ... dec)

****现在我需要将存档和压缩文件移动到备份位置 如果压缩日志属于八月份那么应该是八月文件夹同样适用于所有月份。

所以我使用mv server.log.$(date "+%B-%m-%d" -d '1 day ago').tar.gz /opt/Solartis_Monitoring/logsbackup/$(date "+%B")

我正在使用crontab执行此操作。

问题:

问题是如果文件在下个月的第一天(9月)执行,脚本将找到aug 31文件,它将压缩但在移动压缩文件时,它将被移动到9月月rit ?? 因为我正在使用/opt/Solartis_Monitoring/logsbackup/$(date "+%B")

此处date "+%B"将在9月展开,我的文件将被移至/ opt / Solartis_Monitoring / logsbackup / 9月右....

如何解决此问题。假设文件移动到8月的文件夹中

脚本:

cd /opt/Solartis_Monitoring/JON_Server/logs

for i in `find . -type f -name server.log.$(date "+%Y-%m-%d" -d '1 day ago')`
do tar -czvf server.log.$(date "+%B-%m-%d" -d '1 day ago').tar.gz $i --remove-files

mv server.log.$(date "+%B-%m-%d" -d '1 day ago').tar.gz /opt/Solartis_Monitoring/logsbackup/$(date "+%B")
done

2 个答案:

答案 0 :(得分:1)

试试这个;

如果今天是月份的第1天,请将gzip文件移至上个月;

cd /opt/Solartis_Monitoring/JON_Server/logs
for i in `find . -type f -name server.log.$(date "+%Y-%m-%d" -d '1 day ago')`
do tar -czvf server.log.$(date "+%B-%m-%d" -d '1 day ago').tar.gz $i --remove-files
ifStart=`date '+%d'`
if [ $ifStart == 01 ]
then
mv server.log.$(date "+%B-%m-%d" -d '1 day ago').tar.gz /opt/Solartis_Monitoring/logsbackup/$(date +"%B" -d 'last month')
else 
mv server.log.$(date "+%B-%m-%d" -d '1 day ago').tar.gz /opt/Solartis_Monitoring/logsbackup/$(date "+%B")
fi


done

答案 1 :(得分:1)

试试这个。

date "+%B" -d '1 day ago' 

上面的命令将为您提供昨天的Month参数。

cd /opt/Solartis_Monitoring/JON_Server/logs 
for i in `find . -type f -name server.log.$(date "+%Y-%m-%d" -d '1 day ago')`
do tar -czvf server.log.$(date "+%B-%m-%d" -d '1 day ago').tar.gz $i --remove-files
mv server.log.$(date "+%B-%m-%d" -d '1 day ago').tar.gz 
/opt/Solartis_Monitoring/logsbackup/$(date "+%B" -d '1 day ago')