首页 > 解决方案 > 如何使这个 bash 脚本不删除我的所有文件?

问题描述

我有一个 cron 作业,每 5 分钟一次,将我的 MYSQL 备份到以 .sql.gz 结尾的文件。但这是每天数百个文件。所以我搜索了互联网,发现了这个 bash 脚本,我希望它只适用于指定的 /backup 文件夹中的文件,并且只适用于 .sql.gz 文件。但我很快发现它删除了我根文件夹中的所有内容。:-) 我能够在半小时内 FTP 文件并备份我的网站,但我仍然需要脚本按预期工作。我是 bash 脚本的新手,所以我问我在编辑我在互联网上找到的脚本以满足我的需要时做错了什么?什么会起作用?

这是流氓脚本。不要按原样运行它。它坏了,这就是为什么我在这里:

find /home/user/backups/*.gz * -mmin +60 -exec rm {} \;

我怀疑它的最后一个反斜杠应该是 /home/user/backups/ 而且我应该在 -min 之前删除 *

所以我需要的是:

find /home/user/backups/*.gz -mmin +60 -exec rm {} /home/user/backups/; 

我对么?还是还缺少什么?顺便说一句,我在 Dreamhost 共享主机 CRON 上运行它。他们的支持真的不想帮助解决 BASH 问题,我试过了。

标签: bashdelete-filebackup-strategies

解决方案


文件名参数find应该是开始递归搜索的目录。然后使用-name和其他选项过滤到与您想要的条件匹配的文件。

find /home/user/backups -type f -name '*.sql.gz' -mmin +60 -exec rm {} +
  • -type f表示只选择普通文件
  • -name '*.sql.gz'表示仅以结尾的文件名.sql.gz
  • -mmin +60表示超过 60 分钟的文件

并且在末尾使用+而不是意味着它应该只对所有选定的文件名运行一次命令,而不是为每个文件名单独运行;这是一个小的效率改进。\;-exec


推荐阅读