ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

告别 rm 误删:trash-cli 终极回收站指南,4 个实战场景一次讲透

告别 rm 误删:trash-cli 终极回收站指南,4 个实战场景一次讲透 告别 rm 误删trash-cli 终极回收站指南4 个实战场景一次讲透【免费下载链接】trash-cliCommand line interface to the freedesktop.org trashcan.项目地址: https://gitcode.com/gh_mirrors/tr/trash-cli某个周五下午六点我盯着屏幕上的光标手一抖敲下了rm -rf backups/回车。屏幕安静得可怕那是攒了整整一年的数据库导出。那一天我彻底明白rm 没有后悔药但回收站有。trash-cli 正是这样一个工具——它是 freedesktop.org 回收站的命令行接口和 KDE、GNOME、XFCE 共用同一个回收站把删除变成随时可以反悔的动作。本文不罗列命令而是用 4 个实战场景带你吃透 trash-cli 用法从找回误删文件到自动清理一次学会。为什么你已经离不开回收站却还在裸奔 rm先做个对比。图形界面下每个人都知道删除文件先进回收站、想反悔随时捞回来可一旦进了终端大家瞬间失忆张口就是rm -rf仿佛回收站不存在。而垃圾箱里的 GUI 虽然好用却没法写进脚本、没法定时清理、也没法跨机器批量操作。trash-cli 的定位恰好补上这个空档终端里执行 rm 的安全替代品同时具备脚本化能力。它把文件挪进标准回收站目录默认~/.local/share/Trash/并同步记录原始路径和删除时间。文件进了回收站就意味着trash-list能查到、trash-restore能捞回来桌面回收站里也看得到。下面直接进场景。场景一误删文件后三步找回假设你刚把report.docx扔进回收站一分钟后后悔了。第一步确认它还在$ trash-list 2026-08-14 10:30:15 /home/you/report.docx 2026-08-12 09:12:44 /home/you/old_backup.tar.gz输出很直白删除时间 原始路径。文件多了可以配合 grep 过滤比如trash-list | grep report。第二步恢复它。直接运行trash-restore它会列出全部垃圾并等你选择0 2026-08-14 10:30:15 /home/you/report.docx 1 2026-08-12 09:12:44 /home/you/old_backup.tar.gz What file to restore [0..1]: 0输入序号回车report.docx就回到了原来的位置原路径下的同名目录会自动重建。场景二给回收站装上自动过期按钮回收站最怕什么越攒越多磁盘悄悄被吃满。trash-cli 给了你一个按龄清理的开关——trash-empty加上天数只删超过这个天数的文件$ trash-empty 30 # 只清掉 30 天前的垃圾 $ trash-empty # 不带参数 全部清空注意顺序trash-empty是不可逆的清空之前务必先用trash-list过一遍。配合 crontab就变成全自动(crontab -l ; echo weekly /usr/local/bin/trash-empty 30) | crontab -每周自动清理 30 天前的垃圾磁盘和后悔药同时保住完美。场景三只想删回收站里的那批文件有时候你要清的不是全部而是那一类。比如项目里一堆.o编译产物被扔进了回收站只想定向消灭它们$ trash-rm *.o注意引号别省——裸写trash-rm *.o会让 shell 先展开通配符结果什么都匹配不上。删除前同样建议先侦查$ trash-list | grep \.o$ # 先看命中哪些 $ trash-rm *.o # 再精准清理场景四一次恢复多个文件trash-restore比想象中更灵活它支持逗号分隔和区间一次可以捞回一大把What file to restore [0..5]: 0-2, 50-2恢复前三项逗号再接5恢复第六项一条命令搞定。如果原位置已经存在同名文件默认会拒绝覆盖并提示确定要顶掉旧文件加--overwrite即可$ trash-restore --overwrite把回收站变成肌肉记忆进阶工作流场景玩熟了就该让工具主动融入日常。最经典的一招是把rm直接调包# 加入 ~/.bashrc alias rmtrash-put从此终端里敲rm实际执行的是扔进回收站手滑了随时能救。真想物理删除用/bin/rm绕开别名即可。两个提醒脚本里 alias 默认不生效写脚本请直接写trash-put另外像find ... -delete这类操作不会经过回收站注意区分。再进一步可以把定期体检回收站做成一个小函数比如列出超过 60 天的垃圾并询问是否清理配合上面的 crontab 思路让清理变成例行公事而不是年度恐慌。从源码看它怎么工作两个关键设计1. 一个.trashinfo是怎么诞生的当你执行trash-put源码里format_trash_info.py会拼出这样一段内容[Trash Info] Path%2Fhome%2Fyou%2Freport.docx DeletionDate2026-08-14T10:30:15路径做了 URL 编码删除时间用%Y-%m-%dT%H:%M:%S固定格式。文件名撞车也不怕——suffix.py里有个聪明的小逻辑第一个文件不加后缀第二个加_1、_2……超过 100 个时改用 0~65535 的随机数彻底避免同名覆盖。更讲究的是顺序janitor.py里先写.trashinfo、再移动文件本体保证就算中途失败回收站里也不会留下无主的孤儿文件。2.trash-restore怎么解析你输入的0-2, 5看restore_asking_the_user.py的parse_indexes按逗号切分含-的解析成区间否则当成单个序号随后逐个校验越界。整个读输入→解析→恢复流程用EitherLeft/Right串成一条数据管道任一步出错就短路返回错误信息。设计思想很清晰把错误当成数据流传递而不是到处 try/except代码读起来像在描述业务而不是在防崩溃。想继续深挖的入口命令行手册在man/man1/如trash-put.1、trash-restore.1实现源码在trashcli/put/、trashcli/restore/、trashcli/list/规格依据是docs/trashspec-1.0.html。快问快答问trash-put 和 rm 到底啥区别答rm 直接抹掉文件数据神仙难救trash-put 只是把文件挪进回收站随时能还原。想彻底删除再用trash-empty清空两段式更安全。问误删后一定能恢复吗答只要还没trash-emptytrash-list里就能看到trash-restore选个号就回来了。清空之后才真正没救所以清理前一定要先看一眼。问U 盘、移动硬盘上的文件也进回收站答按 freedesktop 规范各挂载卷会优先用卷顶的/.Trash或/.Trash-$uid目录避免跨设备搬文件兜底才回落到 home 回收站。同一台机器上混用 GNOME/KDE 都互相可见。问我该现在就 alias rm 吗答可以先在测试目录跑几天trash-put确认自己熟悉了再上 alias。记住 alias 只对交互式 shell 生效脚本里记得写全命令。现在就动手行动清单pip install trash-cli装好用trash-put扔一个测试文件再用trash-list验证回收站里能看到它。把alias rmtrash-put写进~/.bashrc并记住/bin/rm才是真·删除。给 crontab 加一条trash-empty 30的每周任务让磁盘不再偷偷膨胀。下次手滑时冷静执行trash-list→trash-restore全程不超过十秒。想深入源码从trashcli/put/suffix.py和trashcli/restore/restore_asking_the_user.py这两个小文件读起。删除是瞬间的事后悔却是长久的。给删除加一道缓冲是命令行老手最后的体面——今天就从trash-put这一条命令开始吧。【免费下载链接】trash-cliCommand line interface to the freedesktop.org trashcan.项目地址: https://gitcode.com/gh_mirrors/tr/trash-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表