(轉)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的行爲細節,這些細節事實上至今爲止我都沒有徹底模仿出來,由於程序目前的算法不容許這麼作,不過因爲程序已經基本可用而時間寶貴,只能等到之後有空的時間再實現罷。算法

相關文章
相關標籤/搜索