我正在尝试编写一个脚本来在目录中每天创建mysqldumps,并检查该目录中的所有备份,并删除将在cron上运行的超过7天的任何内容。
所以我的函数正常工作,这只是我的最后一个echo命令,它没有按照我的意愿行事。这就是我到目前为止所做的:
DBNAME=database
DATE=`date +\%Y-\%m-\%d_\%H\%M`
SQLFILE=$DBNAME-${DATE}.sql
curr_dir=$1
#MAIN
mysqldump -u root -ppassword --databases $DBNAME > $SQLFILE
echo "$SQLFILE has been successfully created."
#Remove files older than 7 days
for filepath in "$curr_dir"*
do
find "$filepath" -mtime +7 -type f -delete
echo "$filepath has been deleted."
done
exit
因此备份创建和删除旧文件都有效。但是,我的问题是echo "$filepath has been deleted."
正在打印目录中的所有文件,而不仅仅是删除了超过7天的文件。我在哪里错了?
编辑(完整解决方案):
这是一个完整的解决方案,使用每个人的建议从答案和评论中为我工作。这适用于cron作业。我必须指定main函数的输出文件路径,因为文件是在根目录中创建的,而不是在Argument $ 1中指定的路径。
谢谢大家的帮助! if语句还检查$ 1是否是我想要删除文件的指定目录。
#Variables
DBNAME=database
DATE=`date +\%Y-\%m-\%d_\%H\%M`
SQLFILE=$DBNAME-${DATE}.sql
curr_dir=$1
#MAIN
mysqldump -u root -ppassword --databases $DBNAME > /path/to/db-backups/directory/$SQLFILE
echo "$SQLFILE has been successfully created."
#Remove files older than 7 days
for filepath in "$curr_dir"*
do
if [[ $1 = "/path/to/db-backups/directory" ]]; then
find "$filepath" -mtime +7 -type f -delete -exec sh -c 'printf "%s has been deleted.\n" "$@"' _ {} +
fi
done
exit
答案 0 :(得分:2)
您可以将echo
合并到find
:
find "$filepath" -mtime +7 -type f -delete -exec echo '{}' "has been deleted." \;
-delete
选项只是-exec rm '{}' \;
的快捷方式,所有-exec
命令都按照您指定的顺序运行。