暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

rm 删除文件超长报错解决

渔舟唱晚 2025-10-26
271

✅ 目标

  • 删除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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论