繁体   English   中英

如何获取echo以仅打印已删除的文件路径?

[英]How to get echo to print only deleted file paths?

我正在尝试编写一个脚本,每天在一个目录中创建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工作。 我必须指定主函数的输出文件路径,因为这些文件是在根目录中创建的,而不是在参数$ 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

您可以将echo合并到find

find "$filepath" -mtime +7 -type f -delete -exec echo '{}' "has been deleted." \;

-delete选项只是-exec rm '{}' \\;的快捷方式-exec rm '{}' \\; 并且所有-exec命令均以您指定的顺序运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM