无法从终端删除文件

时间:2018-04-27 14:43:24

标签: bash awk

我有一个包含数据库备份的文件夹,但我想使用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文件

存储和执行的

2 个答案:

答案 0 :(得分:1)

解析ls输出被广泛认为是一个坏主意。我会尝试一个find命令,它应该更干净。

find /root/copy/dbbackup/smpp_credits/ -maxdepth 1 -mtime +365 -exec rm -rf {} \;

来自here

。您可以将-mtime +30用于超过一个月的文件。

答案 1 :(得分:1)

假设GNU finddate-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 -- '{}' +