trash-cli 实战教程:5 个命令构建你的 Linux 命令行回收站
【免费下载链接】trash-cliCommand line interface to the freedesktop.org trashcan.项目地址: https://gitcode.com/gh_mirrors/tr/trash-cli
你有没有过这样的经历:一条rm -rf敲下去,几 GB 的重要文件瞬间灰飞烟灭,连后悔的机会都没有?在 Linux 终端里,trash-cli 就是专为这类场景诞生的「命令行回收站」。trash-cli 是 freedesktop.org 回收站规范的官方命令行接口,兼容 KDE、GNOME、XFCE 等桌面环境的回收站,让你在终端中也能安全删除文件,并在任何时候轻松找回。本文用 5 个核心命令 + 若干实战技巧,带你从零上手,彻底告别「误删即丢失」。
为什么你需要一个命令行回收站
rm与 trash-cli 的核心区别,在于「删除是否可逆」。rm直接清掉磁盘上的数据块,trash-cli 则把文件搬进回收站目录,并留下一份记录原始位置与删除时间的元数据,随时可以原路恢复。
| 对比维度 | rm | trash-cli |
|---|---|---|
| 删除结果 | 永久删除,不可恢复 | 移入回收站,可随时恢复 |
| 原始路径记录 | 无 | 自动记录,恢复时原路放回 |
| 桌面回收站兼容 | 不兼容 | 与图形界面回收站完全互通 |
| 批量/定时操作 | 需自行组合脚本 | 内置天数过滤、模式匹配 |
对系统管理员和开发者而言,trash-cli 的价值有三点:一是安全兜底,误删后仍有后悔药;二是桌面生态互通,终端删的文件在文件管理器里同样可见;三是易于脚本化,配合 cron 可实现自动清理。
两步上手:2 分钟跑通你的第一次安全删除
安装与使用都非常简单,推荐通过 pip 安装:
pip install trash-cli装好后,用一个测试文件验证效果:
echo "hello" > test.txt trash-put test.txt运行后你将看到类似输出:
'test.txt' trashed in ~/.local/share/Trash此时test.txt已经从当前目录消失,但它并没有被销毁,而是被安全地移入了回收站。现在试着用trash-list查看一下:
2026-08-14 10:30:15 /home/yourname/test.txt输出第一列是删除时间,第二列是该文件被删除前的完整原始路径。至此,你的命令行回收站已经跑通了。
先看原理:回收站里到底发生了什么
理解了内部机制,后续所有命令的行为都会变得顺理成章。执行trash-put后,工具会做两件事:
- 把文件移动到回收站目录
files/下,通常位于~/.local/share/Trash/files/; - 在
info/目录下生成一个同名的.trashinfo元数据文件,记录删除前的原始路径与删除时间。
这两个动作保证了两件事:文件本体安全存放、原始位置信息不丢失。trash-list负责读取并展示这些信息,trash-restore则依据元数据把文件搬回原处,trash-empty与trash-rm负责反向清理。五条命令各司其职,组成一个完整的「存、查、取、清」闭环。
场景一:安全删除文件,用 trash-put
trash-put 是这套工具链的入口,任何「想删但怕删错」的操作都应交给它。
删除单个文件:
trash-put report.pdf批量删除:
trash-put *.log trash-put build/ dist/几个值得注意的细节:
- 对目录同样生效,会整棵子树移入回收站;
- 重复删除同名文件时,会自动追加序号避免覆盖;
- 如果回收站所在分区与文件不在同一分区,工具会优先选择文件所在分区的回收站目录,避免跨设备移动失败。
场景二:查看回收站内容,用 trash-list
trash-list 默认列出所有回收站文件,按删除时间与原始路径输出:
trash-list输出示例:
2026-08-14 10:30:15 /home/yourname/test.txt 2026-08-01 09:12:44 /home/yourname/old_backup.tar.gz如果想看文件在回收站里的实际存放位置,可以加--show-files,输出会追加一列->指向备份副本路径。需要显示文件大小时使用--size,首列会变为文件体积。配合管道即可实现检索:
trash-list | grep "backup"这条组合命令在回收站文件很多时非常实用,能快速定位目标。
场景三:恢复误删文件,用 trash-restore
trash-restore 是整套工具的「后悔药」,采用交互式操作:
trash-restore它首先会列出当前目录下被删除过的文件:
0 2026-08-14 10:30:15 /home/yourname/test.txt 1 2026-08-01 09:12:44 /home/yourname/old_backup.tar.gz What file to restore [0..1]:在提示符后输入序号即可恢复对应文件。它还支持一次性恢复多个:输入0,1恢复 0 号和 1 号,输入0-1恢复区间内的全部文件,两者也可以混用,例如0,2-3。恢复时若目标位置已存在同名文件,工具会拒绝覆盖并给出提示,避免意外覆盖。如果什么都不想恢复,直接回车退出即可。
场景四:定时清理回收站,用 trash-empty
回收站不能只进不出,trash-empty 负责按时间清理:
# 清空整个回收站 trash-empty # 只删除 30 天前的文件 trash-empty 30trash-empty 30会依据 .trashinfo 中的删除时间筛选,仅清理超过 30 天的文件,这是最常用的运维姿势。几个高频参数:
-f:跳过交互确认,适合脚本调用;--dry-run:预演模式,只列出将被删除的文件而不真正删除;-v:详细输出,配合--dry-run可提前检查清理范围;--all-users:清理系统内所有用户的回收站(需要相应权限)。
场景五:选择性删除,用 trash-rm
如果只想删掉回收站里符合某种模式的文件,用 trash-rm 更精准。它使用fnmatch通配符匹配文件名:
# 删除回收站中所有 .o 文件 trash-rm "*.o" # 删除回收站中所有 .tmp 文件 trash-rm "*.tmp"注意模式需要加引号,避免被 shell 提前展开。它只影响回收站内的文件,绝不会触碰当前工作目录下的同名文件,安全性有保障。
进阶实战:3 个工程化组合技巧
技巧一:用 alias 给 rm 加一道保险。在你的 shell 配置中加入:
alias rm='echo "请使用 trash-put 安全删除"; false'从此敲错rm也会被拦下提醒,强制养成安全删除的习惯。
技巧二:crontab 自动清理过期文件。将下面一行加入 crontab,即可每天自动删除回收站中超过 30 天的文件:
(crontab -l ; echo "@daily $(which trash-empty) 30 -f") | crontab --f保证无人值守时不会卡在交互确认上。
技巧三:脚本中先查后删。在自动化脚本里,先用 trash-list 确认待删目标,再决定是否调用 trash-empty,形成「先审计、后清理」的稳妥流程:
trash-list | grep "temp" && trash-empty 0配合 grep、awk 等标准管道工具,trash-cli 可以无缝嵌入你已有的脚本体系。
源码导读:5 个命令背后的核心模块
想深入了解实现细节,可以按下面路径阅读源码:
trashcli/put/main.py:trash-put 主入口,负责组装文件系统、时钟、日志等依赖;trashcli/list/list_trash_action.py:trash-list 核心动作,扫描回收站目录并解析 .trashinfo;trashcli/restore/restore_asking_the_user.py:trash-restore 的交互逻辑,负责解析序号与区间输入;trashcli/empty/parser.py:trash-empty 的参数解析器,定义天数、交互、预演等选项。
项目同时提供了完整的man/man1/手册页与docs/文档目录,命令细节与设计讨论均可查阅,建议以官方文档为准。
常见问题解答
Q:trash-put 和 rm 到底有什么区别?A:trash-put 把文件移入回收站并记录原始路径,可随时恢复;rm 直接释放数据块,删除即永久丢失。
Q:恢复文件时提示拒绝覆盖怎么办?A:说明目标位置已存在同名文件,trash-restore 出于安全默认拒绝覆盖,可先移动或重命名现有文件后再恢复。
Q:trash-empty 30 和 trash-empty 有什么区别?A:前者只清理删除时间超过 30 天的文件;后者清空整个回收站,使用前务必确认。
Q:trash-rm 的匹配规则是什么?A:使用 Python 的fnmatch通配符,*匹配任意字符,模式需加引号防止 shell 展开。
Q:终端删除的文件能在桌面回收站看到吗?A:可以。trash-cli 遵循 freedesktop.org 规范,写入的是标准回收站目录,与图形界面完全互通。
总结与下一步
回顾一下,trash-cli 为你带来了五件武器:trash-put 安全删除、trash-list 随时查看、trash-restore 一键恢复、trash-empty 定时清理、trash-rm 精准移除。
- ✅ 与桌面回收站完全兼容,终端图形双端互通;
- ✅ 原始路径自动记录,恢复零成本;
- ✅ 天然支持批量与定时场景,脚本友好;
- ✅ 安装简单,一个 pip 命令即可上手。
现在就去安装一个,用trash-put替换掉你手上危险的rm,从此告别数据误删的焦虑。
【免费下载链接】trash-cliCommand line interface to the freedesktop.org trashcan.项目地址: https://gitcode.com/gh_mirrors/tr/trash-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考