如何实现每月1号运行脚本删除上月1号前修改的文件?
当然可行!这是个非常实用的周期性文件清理需求,完全可以通过脚本轻松实现
核心实现思路
我们可以借助find命令结合动态日期计算,精准定位并删除目标文件——关键是要自动算出上月1号的日期,再以此为基准筛选出修改时间更早的文件。
具体脚本示例(Linux/GNU环境)
- 先在脚本里计算上月1号的日期:
# 获取当前月1号,再往前推1个月得到上月1号的标准日期格式 last_month_first=$(date -d "$(date +%Y-%m-01) -1 month" +%Y-%m-01)
比如3月1号运行时,这个变量会被自动赋值为202X-02-01。
- 用
find命令执行删除操作:
# 替换成你要清理的目标目录路径 target_dir="/path/to/your/target/folder" # 查找所有在上月1号之前修改的文件并删除 find "$target_dir" -type f ! -newermt "$last_month_first" -delete
参数说明:
! -newermt "$last_month_first":筛选修改时间早于上月1号的文件-type f:只针对文件(避免误删目录)-delete:直接删除匹配文件(建议先换成-print测试,确认要删的文件列表正确后再用-delete)
适配macOS系统的小调整
macOS自带的date命令参数和GNU版本不同,计算上月1号可以改成:
last_month_first=$(date -v-1m -d "$(date +%Y-%m-01)" +%Y-%m-01)
或者安装GNU date(通过brew install coreutils),之后用gdate代替date,就能和Linux脚本保持完全一致。
定时运行设置
要让脚本每月1号自动执行,只需在crontab里添加一条任务:
# 每月1号0点0分运行清理脚本 0 0 1 * * /path/to/your/cleanup_script.sh
重要注意事项
- 先测试再删除:第一次运行时把
-delete换成-print,核对输出的文件列表是否符合预期,避免误删重要数据 - 权限检查:运行脚本的用户需要拥有目标目录的读写权限
- 备份关键文件:如果清理的是重要业务数据,建议先做备份再执行删除操作
内容的提问来源于stack exchange,提问作者dhman
相关产品推荐
相关产品推荐

