bash - 如何使这个 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 问题,我试过了。
解决方案
文件名参数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
推荐阅读
- python - 为 django 添加下拉列表
- python - Python 我想无限期地重复一个函数
- batch-file - 检查进程是否关闭/未运行,然后重新启动应用程序
- python - 用 Python 编写一个 Discord 机器人 - 处理一个重复用户刚才所说的内容并在其间使用表情符号的命令,无法弄清楚
- sql-server - SQL SERVER 17 默认安全组丢失
- sql-server - 在 sql server 中为 UDF 创建正文
- scala - Dockerize Scala 应用程序:无法找到或加载主类
- ios - AVAssetExportSession - 如何从视频持续时间中修剪毫秒
- java - 将长数的每一位表示为列表的一个节点
- c# - 如何使用 Json.Net 将通用接口反序列化为通用具体类型?