1. 程式人生 > 實用技巧 >給你一個反悔的機會

給你一個反悔的機會

Linux 下 rm 命令是表示刪除一個檔案,而Linux是沒有回收站機制,所以檔案一旦刪除的話,就徹底從磁碟上刪除了。而很多人喜歡加上 -f 選項,是代表強制的意思,更暴力的是刪除資料夾的時候使用 rm -rf 命令,這樣一來,資料夾本身,以及資料夾下的子子孫孫,都一了百了了。

而萬一如果你執行了 rm -rf /* 命令,那無疑效果與下面等同:

由於沒有回收站機制,很多人吃過這個虧,良許也是,曾經辛苦寫的幾個月的程式碼,一個 rm 命令全部化為烏有,搞得每次執行 rm 命令的時候,手都是顫抖的……

既然Linux沒有回收站,那我們能否自己實現一個?答案當然是肯定的。下面,我們就自己動手做一個回收站,給自己一個後悔的機會。

既然罪魁禍首是 rm 命令,那我們就對這個命令進行改造。在Linux下對命令進行重定義是使用 alias 命令,修改的是 .bashrc 檔案,即:

vim ~/.bashrc

在檔案尾部,我們新增以下幾句程式碼:

mkdir -p ~/.trash
alias rm=trash
alias r=trash
alias rl='ls ~/.trash/'
alias ur=undelfile

undelfile()
{
    mv -i ~/.trash/$@ ./
}

trash()
{
    mv -i $@ ~/.trash/
}

cleartrash()
{
    read -p "clear sure?[n]" confirm
    [ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/*
}

在這裡,我們是在家目錄下建立一個 .trash 的隱藏資料夾,作為回收站。然後,我們對 rm 命令進行重定義。當我們執行 rm 或者 r 的時候,將執行 trash 函式。而在 trash 函式裡,只做一件事:

mv -i $@ ~/.trash/

就是將 rm 之後所有的檔案移動到 .trash 目錄下(即模擬丟進回收站)。-i 選項表示如果 .trash 目錄有同名檔案的話,將提示是否覆蓋。

我們將 rl 定義為 ls ~/.trash/ ,也就是說,我們可以通過 rl 來檢視 .trash 目錄下的檔案,即被「刪除」的檔案。

如果要還原檔案,可以執行 ur ,而 ur 將執行 undelfile

函式。在 undelfile 裡,又將 ur 之後的檔案從 .trash 目錄移回到原目錄,從而實現檔案刪除還原。

當過了一段時間後,回收站裡檔案太多了,我們可以使用 cleartrash 命令清空回收站。它將執行同名函式,呼叫 /bin/rm 命令將 .trash 目錄清空。

.bashrc 檔案修改完畢之後,我們要讓它生效:

source ~/.bashrc

我們來實際體會一下:

刪除檔案

alvin@alvin-pc:~/test$ touch file1 file2 file3
alvin@alvin-pc:~/test$ ls
file1  file2  file3
alvin@alvin-pc:~/test$ rm file1 file2 
alvin@alvin-pc:~/test$ r file3

查看回收站檔案

alvin@alvin-pc:~/test$ rl
file1  file2  file3

還原被刪除的檔案

alvin@alvin-pc:~/test$ rl
file1  file2  file3
alvin@alvin-pc:~/test$ ur file1
alvin@alvin-pc:~/test$ ur file2
alvin@alvin-pc:~/test$ ur file3
alvin@alvin-pc:~/test$ ls
file1  file2  file3
alvin@alvin-pc:~/test$ rl
alvin@alvin-pc:~/test$ 

清空回收站

alvin@alvin-pc:~/test$ rm file1 file2 file3
alvin@alvin-pc:~/test$ rl
file1  file2  file3
alvin@alvin-pc:~/test$ cleartrash
clear sure?[n]y
alvin@alvin-pc:~/test$ rl
alvin@alvin-pc:~/test$

通過以上這些步驟,我們雖然可以實現一個回收站的功能,但實際的工作中,我們還是要養成定時備份的習慣,這樣即使有誤操作,我們也可以將損失降到最低。


公眾號:良許Linux

有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章