温馨提示×

CentOS回收站清理脚本有哪些

小樊
40
2026-01-10 15:01:13
栏目: 智能运维

CentOS 回收站清理脚本与实现方式

一 脚本类型与适用场景

  • 桌面环境 GNOME 回收站:路径为 ~/.local/share/Trash/,包含 files/info/ 两个子目录。适合本地图形界面用户一键清空或按时间清理。
  • 命令行自定义回收站:为 root 或普通用户自建 ~/.trash 或自定义目录,配合别名或函数实现 rm → 移入回收站、列表、恢复、清空等功能。
  • 使用 trash-cli 的标准化方案:提供 trash-put/trash-list/trash-restore/trash-empty/trash-rm,便于脚本化与统一运维。

二 可直接使用的清理脚本

  • 桌面 GNOME 回收站一键清空(按天保留)
#!/usr/bin/env bash
# 用法:sudo ./clean_gnome_trash.sh [DAYS=7]
set -Eeuo pipefail
DAYS=${1:-7}
TRASH_ROOT="${HOME}/.local/share/Trash"
FILES_DIR="$TRASH_ROOT/files"
INFO_DIR="$TRASH_ROOT/info"

if [[ ! -d "$FILES_DIR" ]]; then
  echo "未找到回收站目录:$FILES_DIR"
  exit 0
fi

# 删除超过指定天数的文件与目录
find "$FILES_DIR" -mindepth 1 -mtime +"$DAYS" -delete 2>/dev/null || true
find "$INFO_DIR"  -mindepth 1 -mtime +"$DAYS" -delete 2>/dev/null || true

echo "已清理 $TRASH_ROOT 中超过 $DAYS 天的项目。"

说明:GNOME 回收站由 files/info/ 组成,清理时建议两者同步;如为 root 执行,请将 $HOME 替换为 /root。该脚本可按需设置保留天数(默认 7 天)。

  • 命令行自定义回收站按时间清理
#!/usr/bin/env bash
# 用法:sudo ./clean_custom_trash.sh [TRASH_DIR=/root/.trash] [DAYS=30]
set -Eeuo pipefail
TRASH_DIR="${1:-/root/.trash}"
DAYS=${2:-30}

[[ -d "$TRASH_DIR" ]] || { echo "回收站不存在:$TRASH_DIR"; exit 0; }

# 删除超过指定天数的文件与目录
find "$TRASH_DIR" -mindepth 1 -mtime +"$DAYS" -delete 2>/dev/null || true

echo "已清理 $TRASH_DIR 中超过 $DAYS 天的项目。"

说明:适用于自建回收站(如 ~/.trash)。可按用户或全局设置不同的 TRASH_DIR,并调整保留天数(默认 30 天)。

  • 命令行自定义回收站按容量阈值清理
#!/usr/bin/env bash
# 用法:sudo ./clean_trash_by_size.sh [TRASH_DIR=/root/.trash] [MAX_KB=10485760]  # 10GB
set -Eeuo pipefail
TRASH_DIR="${1:-/root/.trash}"
MAX_KB=${2:-10485760}  # 默认 10GB

[[ -d "$TRASH_DIR" ]] || { echo "回收站不存在:$TRASH_DIR"; exit 0; }

# 计算回收站总大小(KB)
total_kb=$(du -sk "$TRASH_DIR" 2>/dev/null | awk '{print $1}')
if (( total_kb > MAX_KB )); then
  # 简单策略:先删文件,再删空目录;可按需改为按 mtime 逐步清理
  find "$TRASH_DIR" -mindepth 1 -type f -delete 2>/dev/null || true
  find "$TRASH_DIR" -mindepth 1 -type d -empty -delete 2>/dev/null || true
  echo "回收站超过 ${MAX_KB}KB(当前 ${total_kb}KB),已执行清理。"
else
  echo "回收站当前 ${total_kb}KB,未超过阈值 ${MAX_KB}KB。"
fi

说明:当回收站容量超过阈值(默认 10GB)时触发清理,优先删除文件再清理空目录;可按需优化为“按最旧文件先删”的策略。

三 定时任务与一键安装示例

  • 定时清理示例(系统级)
# 每天 02:00 清理 GNOME 回收站中超过 7 天的项目
0 2 * * * /usr/bin/find /root/.local/share/Trash/files -mindepth 1 -mtime +7 -delete
0 2 * * * /usr/bin/find /root/.local/share/Trash/info  -mindepth 1 -mtime +7 -delete

# 每天 03:00 清理自定义回收站(/root/.trash)中超过 30 天的项目
0 3 * * * /usr/bin/find /root/.trash -mindepth 1 -mtime +30 -delete

说明:将脚本保存至如 /usr/local/bin/,使用 crontab -e 添加任务;为多用户环境分别设置其 HOME 路径。

  • 一键安装 trash-cli(便于脚本化清理)
#!/usr/bin/env bash
# CentOS/RHEL
sudo yum install -y trash-cli
# 验证
trash-empty --version 2>/dev/null || echo "trash-cli 安装失败,请检查仓库或网络。"

说明:安装后可使用 trash-empty 一键清空,或配合 trash-list/trash-restore 做更细粒度运维。

四 使用与风险提示

  • 路径差异:桌面环境通常为 ~/.local/share/Trash/filesinfo;自建回收站常用 ~/.trash。清理时两者需同步,避免残留 info 导致恢复异常。
  • 权限与安全:清理其他用户回收站需切换到对应用户或提升权限;执行 rm -rf 前务必确认路径,避免误删系统目录。
  • 别名与绕过:若设置了 alias rm=‘trash-put’,使用 /bin/rm 会绕过回收站;建议统一团队规范,避免混用。
  • 审计与通知:可在清理脚本中加入日志、邮件或企业微信/钉钉告警,便于容量治理与合规审计。

0