我有一个包含数据库备份的文件夹,但我想使用cron自动删除旧备份。
所以我创建了以下脚本
#Get the current year
YEAR=$(date +'%Y')
#Get the current month
MONTH=$(date +'%m')
#Delete data from previous months
deleteOldData() { ls /root/copy/dbbackup/smpp_credits/ | awk -F "-" -v m="$MONTH" '$2 < m' | xargs -d "\n" rm -rf ;}
#Delete data from previous years ( if any )
deletePrevYearData() { ls /root/copy/dbbackup/smpp_credits/ | awk -F "-" -v y="$YEAR" '$3 < y' | xargs -d "\n" rm -rf ;}
deleteOldData
deletePrevYearData
在终端中执行ls /root/copy/dbbackup/smpp_credits/ | awk -F "-" -v m="$MONTH" '$2 < m'
按预期工作(它列出了所需的文件)。
但在附加| xargs -d "\n" rm -rf
时,代码运行并返回而没有任何输出,并且检查目录显示文件仍然存在。顺便说一句,这段代码是从.sh文件
答案 0 :(得分:1)
解析ls
输出被广泛认为是一个坏主意。我会尝试一个find命令,它应该更干净。
find /root/copy/dbbackup/smpp_credits/ -maxdepth 1 -mtime +365 -exec rm -rf {} \;
。您可以将-mtime +30
用于超过一个月的文件。
答案 1 :(得分:1)
假设GNU find
和date
,-newermt
可用于将文件的修改时间与作为参数给定的特定日期进行比较:
delete_older_than_date="$(date +'%Y-%m-01')"
find /root/copy/dbbackup/smpp_credits \
-maxdepth 1 \
-type f \
'!' -newermt "$delete_older_than_date" \
-exec rm -rf -- '{}' +