利用 trash 來取代 rm 在 Terminal 模式下

幾天前再整理檔案的時候,真的幹了一個白目的事情,就是原本我要砍掉的只有jpg檔,所以說造理講我應該會下'rm *.jpg',但是手殘外加腦包的我竟然不小心下成'rm * .jpg'看到出現的錯誤訊息的時候才發現到來不及了,頓時一堆檔案都QQ了,為了防止世界再度破壞...不不不...應該說是為了防止同樣腦殘外加手包的事情再度發生,於是我搬出了google大神,才發現到原來有trash-cli這個套件,簡單說就是terminal的資源回收桶,英文版的文章可以參考這裡,雖然說定期多了要清資源回收的動作,但是這也是防範的最好方式....OTZ

第一步:先安裝trash-cli,我是在ubuntu10.04下安裝的

1
$ sudo apt-get install trash-cli

第二步:新增script 這一步的話最主要是要新增一個script來模擬rm -r的狀況,如果看trash的help就可以知道,雖然說trash也有-r的指令,但是他的指令會被忽略掉。在terminal中輸入

1
$ sudo gedit /usr/bin/trash-rm

並把下面的code貼入,我在這個地方有做了一些修改,因為原先的script好像會吐出錯誤訊息。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
# command name: trash-rm
shopt -s extglob
recursive=1
declare -a cmd
((i = 0))
for f in "$@"
do
 case "$f" in
  (-*([fiIv])r*([fiIv])|-*([fiIv])R*([fiIv])|--recursive)
   if [ "$dshdsh" == 1 ] ; then
    if [ $recursive != 0 -a -d "$f" ] ; then
     echo "skipping directory: $f"
     continue
    fi
   else
    recursive=0
   fi ;;
  (--)
   dshdsh=1;;
  (*)
   if [ $recursive != 0 -a -d "$f" ] ; then
    echo "skipping directory: $f"
    continue
   fi ;;
 esac
 cmd[$i]="$f"
 ((i++))
done
trash "${cmd[@]}"

接著,要讓這個script變成可執行檔

1
$ sudo chmod +x /usr/bin/trash-rm

第三步:利用trash-rm取代rm 也是在terminal中輸入

1
$ gedit ~/.bashrc

把以下的code加入到開啟的文件後面,並儲存

1
alias rm="trash-rm"

接著要reload bashrc就下bash的指令就可以了,到這裡就完成了,你可以利用rm和rm -r的指令來試試看。

其他trash-cli相關指令

1
2
3
empty-trash #清理
list-trash #列出
restore-trash #還原

這幾個應該看名字就知道功用了吧,這裡就不多加說明,更多可以看

1
$ man trash
Wed May. 26 2010
Comments

Comments