当前位置: 首页 > news >正文

trash-cli 实战教程:5 个命令构建你的 Linux 命令行回收站

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 则把文件搬进回收站目录,并留下一份记录原始位置与删除时间的元数据,随时可以原路恢复。

对比维度rmtrash-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后,工具会做两件事:

  1. 把文件移动到回收站目录files/下,通常位于~/.local/share/Trash/files/
  2. info/目录下生成一个同名的.trashinfo元数据文件,记录删除前的原始路径与删除时间。

这两个动作保证了两件事:文件本体安全存放、原始位置信息不丢失。trash-list负责读取并展示这些信息,trash-restore则依据元数据把文件搬回原处,trash-emptytrash-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 30

trash-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),仅供参考

http://www.jsqmd.com/news/1400380/

相关文章:

  • AI智能体开发从零到实战:8周18课,做出能落地的企业级智能体系统
  • 深入理解React Native Gallery Toolkit实现原理:Reanimated 2动画与手势系统结合
  • angular-elastic事件处理详解:监听elastic:resize事件实现自定义逻辑
  • NVIDIA Profile Inspector 显卡调校从零到精通:6 步解锁驱动隐藏参数的完整攻略
  • 如何让iPhone免费流畅畅玩Minecraft Java版?5步保姆级上手教程
  • 2026年模具用硬质合金定制:三大核心发展趋势 - 全域品牌推荐
  • A-08. 异步执行模型:Stream, Event 与流水线并发
  • 从源码到应用:tensor_parallel关键函数tensor_parallel()深度解析
  • SSRF漏洞实战:从原理到CTFHub技能树内网渗透与端口扫描
  • Steam创意工坊下载器免费指南:开源WorkshopDL一键下载742+款游戏模组,无需Steam客户端
  • scrcpy安卓投屏实战:不用装App不用Root,一条命令把手机“搬“进电脑
  • 2026沈阳刑事辩护行业观察:分阶段选型指南与核心律师盘点 - 互联网科技品牌测评
  • 如何快速部署keras-language-modeling模型:打造高效实时问答API服务
  • react-native-testing自定义Hook测试指南:3种实用方法对比
  • QMCFLAC转MP3实操指南:三步突破QQ音乐加密,搞定音频格式转换难题
  • 2026天猫养车加盟要花几笔钱?费用构成、对应权益、减免条件一次讲清 - Chencen
  • kubesphere-v4.1.2离线安装
  • 耐磨用硬质合金定制哪家好?一篇读懂定义、价值与选择路径 - 全域品牌推荐
  • 用图像识别驱动游戏AI:GameAISDK自动化测试框架的完整上手路线
  • 零成本自建云游戏:Sunshine串流服务器完整上手攻略,一台PC全家设备畅玩
  • Palera1n越狱教程:ios.cfw.guide带你一步一步解放A11设备
  • OpenPLC Editor完整上手指南:用免费开源PLC编程工具打通IEC 61131-3项目全流程
  • Linux 服务器初始化标准化手册 (Docker + 1Panel + Jpom)
  • Unity TMP_SDF 分析(三)顶点着色器中的屏幕空间缩放
  • KWDB Playground v1.0.0 正式发布:四种安装方式、三种终端与容器环境管理升级
  • 动手写 Linux 内核模块与驱动:从 hello 到 platform 总线(srvD)
  • InvesTool 部署与配置实战:四关点亮一套投资分析工具,附避坑清单
  • 跨省救护车出租怎么预约 北京长途转院车辆收费标准与卧床患者转运指南 - 产品推荐官
  • 旧款 Mac 免费升级 macOS 实测手记:OpenCore Legacy Patcher 让我那台“退休“电脑重新上岗
  • OpenMontage零密钥入门:把AI编码助手变成你的免费视频制作工作室