(转)Mac OS X写了个rm时将文件放入回收站的小工具

上次因为公司里机器要面临重装,开始仓皇地将Mac本里的文件scp到个人台式机上。忙乱之中原本要删除一个无用的文件夹的,结果用rm -rf的时候tab了一下,补全出来的文件都没看清就按下了回车,毫无疑问,文件删错了。因为rm命令是不走回收站的,连删前确认都不会有,因此就这么把一个有用的文件夹删掉了。幸好后来发现我曾在台式机上备份过这个文件,不然美好的回忆就由于这个操做失误而丢失了。git

为了防止此类事件的再度发生,我曾在Twitter上询问过别人关于实现rm时只把文件送到回收站而不删除的命令。有些人说用mv命令就好了,可是这显然是不够的,由于mv和rm命令选项并不兼容,尤为是本人惯用的rm -rf,mv显然作不到。其次把文件mv进回收站之后是不能put back的,那就更不行了。网上还有些方法提供了可以将文件送入回收站,而且可以put back的方法,这个仍是不错,可是就如我以前所说,并未彻底实现rm的选项功能。所以我就花了几个晚上的实现本身实现了一个符合我这一需求的工具:https://gitcafe.com/bachue/rm-trashgithub

  • 这个工具是彻底用Ruby编写的(一直以来都对纯Ruby情有独钟),考虑到Mac OS X自带Ruby 1.8.7,所以全部代码也在1.8.7上编写,而且保证在运行时绝对不依赖任何Gem(之因此不但愿依赖Gem是由于之前在Linux上用Python写的实用工具的时候出错说包缺失,而后我从github的issues找出了错误的缘由是没有安装依赖包,我显然不会搞Python,因而只能现场Google学习安装pip,再用pip把包装进去,搞得远比使用用C写的程序复杂的多,不能由于本身是这个语言的开发人员就认为其余人也有它的开发环境啊)。
  • 放进回收站的核心功能由AppleScript实现(因此只能跑在Mac OS X上),这里参考了这个Python的实现方法
  • 为了尽量看起来比较炫比较有趣,全部输出信息所有(除了帮助信息外)彩色化。
  • 尽量严格要求全部行为均与系统自带的rm命令一致,凡是不一致的都被当作Bug看待,除了一些不可能实现或是不必实现的功能外(好比三次擦写文件块使得文件不可恢复以及试图恢复文件)。

其实起初我觉得这个工具并不难作,只是把文件夹往回收站一放便可,后来作到交互式删除的时候难度倍增,使得我不得很少次大规模重构了代码以符合这种需求。幸好项目之初就创建了完善的RSpec测试用例,不然确定无暇顾及如此多的边缘Case。同时随着更深刻的开发和研究,发现了愈来愈多刚开始没有发现的rm的行为细节,这些细节事实上至今为止我都没有彻底模仿出来,由于程序目前的算法不容许这么作,不过因为程序已经基本可用而时间宝贵,只能等到之后有空的时间再实现罢。算法

相关文章
相关标签/搜索