不能只删 files 目录,因为 info 子目录存储每个文件的原始路径、删除时间等元数据(.trashinfo 文件),若残留会导致下次清空失败或报 Permission denied 错误;必须同步清空 files 和 info 才符合 freedesktop.org 回收站规范。

直接用 rm -rf ~/.local/share/Trash/{files,info}/* 最快,但容易误删或权限不足;更稳妥的选择是先装 trash-cli,再用 trash-empty —— 它会按标准清理、跳过只读文件、不报错中断,适合日常使用。
为什么不能只删 files 目录
Linux 桌面环境(GNOME/KDE 等)的回收站遵循 freedesktop.org 标准,~/.local/share/Trash/ 下有两个关键子目录:files 存实际文件,info 存每个文件的原始路径、删除时间等元数据(后缀为 .trashinfo)。只删 files 会导致 info 垃圾堆积,下次清空可能失败或报错 Permission denied(尤其当某个 .trashinfo 文件权限异常时)。
正确做法是同步清空两者:
rm -rf ~/.local/share/Trash/files/* ~/.local/share/Trash/info/*- 或更简洁:
rm -rf ~/.local/share/Trash/{files,info}/* - 注意:该命令不会递归进子目录(如
files/subdir),因为标准回收站不建嵌套结构;若存在,说明是手动放进去的,不属于回收站管理范围
trash-cli 的 trash-empty 为什么更安全
trash-cli 是专为 freedesktop 回收站协议设计的工具,它不是简单地暴力删文件,而是按规范逐条检查并清理,自动跳过无法访问的条目,也不因单个错误中断整个流程。
安装和使用很简单:
- Ubuntu/Debian:
sudo apt install trash-cli - CentOS/RHEL/Fedora:
sudo dnf install trash-cli(或yum) - 运行:
trash-empty(当前用户) 或sudo -u username trash-empty(指定用户) - 它还会自动清理
expunge过期项(如果配置了TRASH_MAX_AGE环境变量)
对比 rm -rf,它不会因某个 .trashinfo 缺失对应文件而报错,也不会误删你手动在 Trash 下新建的其他文件夹。
多用户或 root 回收站怎么处理
每个用户的回收站独立存放在自己的 ~/.local/share/Trash,root 用户的在 /root/.local/share/Trash。图形界面右键“清空回收站”只作用于当前登录用户。
批量清理多个用户需分别操作:
- 清理当前所有普通用户(不含 root):
for u in $(cut -d: -f1 /etc/passwd | grep -E '^[a-z]'); do sudo -u "$u" trash-empty 2>/dev/null; done - 清理 root:
sudo trash-empty(前提是已为 root 安装trash-cli) - 用
rm -rf方式则必须显式指定路径,例如:sudo rm -rf /home/alice/.local/share/Trash/{files,info}/* - 注意:
sudo rm -rf ~/.local/share/Trash/*中的~展开为 root 的家目录,不是当前用户的 —— 这是常见权限误操作源头
真正容易被忽略的是:有些桌面环境(如旧版 KDE)会把回收站挂载到 ~/.local/share/Trash-<volume-id></volume-id>,而不是固定路径;此时 trash-list 仍能识别,但 rm -rf ~/.local/share/Trash/* 会漏掉。遇到清空后空间没释放,先运行 trash-list 看是否真为空,再检查 ls ~/.local/share/Trash* 是否有其他 Trash-xxx 目录。


















