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

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

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

  • 这个工具是完全用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的行为细节,这些细节事实上至今为止我都没有完全模仿出来,因为程序目前的算法不允许这么做,不过由于程序已经基本可用而时间宝贵,只能等到以后有空的时间再实现罢。

时间: 2024-12-06 03:18:45

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

如何禁止 Mac OS X 在外接设备上生成 .DS_Store 文件?以及如何批量删除 .DS_Store 文件?

如何禁止 Mac OS X 在外接设备上生成 .DS_Store 文件?以及如何批量删除 .DS_Store 文件?原文链接:http://www.java2class.net/bbs/viewthread.php?tid=254背景信息.DS_Store文件(Desktop Services Store)是一个隐藏的文件,在每一个目录下都有,它存放着这个文件目录的一些特定属性信息 Metadata,比如图标大小.位置.背景图片等属性:有点儿类似于 Windows 操作系统上的 Thumbs.d

如何将Linux rm命令删除的文件放入垃圾箱

因为rm命令删除的文件是不会放入垃圾箱的,所以无法恢复,下面小编就给大家介绍一种方法,通过替换Linux rm命令的方法,从而将rm命令删除的文件放入垃圾箱. 方法: 1. 在/home/username/ 目录下新建一个目录,命名为:.trash 2. 在/home/username/tools/目录下,新建一个shell文件,命名为: remove.sh PARA_CNT=$# TRASH_DIR="/home/username/.trash" for i in $*; do ST

开始使用Mac OS X——写给Mac新人

转载地址:http://www.cnblogs.com/chijianqiang/archive/2011/08/03/2126593.html 写这篇文档的原因有两个, 一.身边使用Mac的朋友越来越多,经常会有人来咨询一些常见 的使用问题,比如:“为什么把界面右上角的红色按钮叉掉,程序还没有关闭?”之类.而且我也不愿意看到很多人使用OSX时仅仅用到最基本的功能.让他们去 Google吧,查完了回来还得问你,所以准备就我的个人经验写一个入门篇,这样再有人问的话,直接把博文地址甩给他就行啦.二.

【转】开始使用Mac OS X——写给Mac新人

写这篇文档的原因有两个,一.身边使用Mac的朋友越来越多,经常会有人来咨询一些常见的使用问题,比如:“为什么把界面右上角的红色按钮叉掉,程序还没有关闭?”之类.而且我也不愿意看到很多人使用OSX时仅仅用到最基本的功能.让他们去Google吧,查完了回来还得问你,所以准备就我的个人经验写一个入门篇,这样再有人问的话,直接把博文地址甩给他就行啦.二.前几天写了一篇文章<从Mac OS X的Lion说起>,主要是回顾和总结性质的.结果被若干不明真相的群众指认为Apple的枪手,这就搞得我很荣幸,既然

linux中使用rm命令将文件移到回收站的方法

今天在终端下,看到我的用户目录下有个-的文件夹(maven生成),相要删除收回点空间,习惯性的用命令 rm -rf ~ ,一回车,猛然想起的时候已经来不及了,世界一下子清静了,想死的心都有了! 没错,-指定的是当前用户的目录,我的用户名是liyd,相当于是执行了rm -rf /home/liyd,所有的文件都删除了.试了linux下的各种文件恢复方法,都不理想,ext4格式,找回来的比率太小了,还要在一大堆乱文件中查找需要的,唉!所幸没什么特别重要的文件,代码都git和svn提交了,损失还能接受

Mac OS使用技巧之十四:自定义文件图标

剩下的教程多是以前遗漏掉的方法,和一些使用的小技巧,做一些补充,希望能帮到大家. 自定义图标 对于Mac OSX用户来说,Dashboard,Dock栏,壁纸以及各种键盘触摸板的快捷操作都是可以高度DIY的东西.但可能许多用户还不知道,Mac下的文件夹和文件也可以来自定义图标,这是Mac给我们的又一炫酷且实用的惊喜.自定义的图标可以让我们的文件更有辨识度,也方便我们管理文件和立刻知晓文件夹的内容. 其实操作相对来说很简单: 首先找到一张自己心仪的图片,双击用预览打开,打开之后鼠标挪到图片内,会出

Mac OS X中打zip包时去除.DS_Store等指定文件

在Finder中的Compress “…”很好用,但是也有烦恼的时候,经常打包会包含进来一些.DS_Store文件,.DS_Store是苹果系统中保存当前目录基本信息的文件,包括图标的位置,显示方式等信息.每一个目录都会有,类似windows平台的destop.ini或者是Thumbs.db. 如果不想将.DS_Store或者__MacOSX…或者.svn等等打包进来,可以打开Terminal,输入下面的命令: 1 zip -r foo.zip foo -x "*.DS_Store"

如何在Mac OS X上面指定Eclipse启动时用指定的某一版本JDK?

编辑 $ECLIPSE_HOME/Eclipse.app/Contents/MacOS/eclipse.ini 文件,在 Finder 中右键或者Ctrl+点击 Eclipse 应用程序,然后点击"显示包内容",进入目录 Contents/MacOS/ 即可找到通过 ls -ltr /Library/Java/JavaVirtualMachines/ 列出已经安装好的各个 JDK 版本的路径,然后在 eclipse.ini 文件中指定之,比如:-vm/Library/Java/Java

Mac OS X 中一些常用的命令行技巧

一.网络设置相关 1.网卡的物理地址的动态重置 出于某些需求,例如网络中的 IP 地址或网络帐号与网卡物理地址绑定,使得多个设备无法切换上网,可尝试临时更改物理地址.不过,系统偏好设置是不能修改网卡物理地址的,这就是命令行的用武之地了.具体来说,若心中已有想修改的物理地址,例如 00:1f:3c:93:b5:99,可执行 $ sudo ifconfig en1 ether 00:1f:3c:93:b5:99 来临时修改网卡的物理地址:若没有物理地址,只是想临时启用尝试一下,可用 openssl