如何让这个 bash 脚本不删除我所有的文件?

How to make this bash script NOT delete all my files?

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

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

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 个问题,我试过了。

find 的文件名参数应该是开始递归搜索的目录。然后使用 -name 和其他选项筛选出符合您所需条件的文件。

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

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