✅ 目标
- 删除3个月前的文件(按修改时间)
- 使用
xargs -n 3000批量处理,避免参数过长 - 支持日志记录、** dry-run 模式**、错误处理
- 支持指定目录、排除路径、文件类型过滤
🔧 脚本:cleanup_old_files.sh
#!/bin/bash
set -euo pipefail
# 配置参数
TARGET_DIR="${1:-/data}" # 默认目录
DRY_RUN=false # 是否 dry-run
LOG_FILE="/var/log/cleanup_old_files.log"
OLDER_THAN_DAYS=90 # 3个月 ≈ 90天
MAX_ARGS=3000 # xargs 每次最多处理 3000 个文件
# 可选:排除某些路径(如备份目录)
EXCLUDE_PATHS=(
"/data/backup"
"/data/archive"
)
# 构建 find 的排除条件
EXCLUDE_EXPR=""
for path in "${EXCLUDE_PATHS[@]}"; do
EXCLUDE_EXPR+=" -path '$path' -prune -o"
done
# 日志函数
log() {
echo "[$(date '+%F %T')] $*" | tee -a "$LOG_FILE"
}
# 删除函数
delete_files() {
if $DRY_RUN; then
log "[DRY-RUN] 将删除以下文件:"
cat
else
log "正在删除 $(wc -l < <(cat)) 个文件..."
xargs -n "$MAX_ARGS" rm -f
fi
}
# 主逻辑
log "开始清理 $TARGET_DIR 中 $OLDER_THAN_DAYS 天前的文件..."
# 使用 find 查找文件,排除指定路径,按时间过滤
eval "find '$TARGET_DIR' $EXCLUDE_EXPR -type f -mtime +$OLDER_THAN_DAYS -print" |
delete_files
log "清理完成。"
✅ 使用方式
# 给脚本赋权
chmod +x cleanup_old_files.sh
# dry-run 模式(不真正删除)
./cleanup_old_files.sh /data
# 真正删除
DRY_RUN=false ./cleanup_old_files.sh /data
🔒 安全建议
- 先 dry-run,确认无误再真正删除
- 可加入
ionice和nice降低对系统影响 - 可加入
mail或告警脚本,失败时通知管理员
✅ 可选增强(高级)
- 支持按文件类型过滤(如只删
.log) - 支持压缩后备份再删除
- 支持并行删除(
xargs -P)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




