之前小編在開發時因爲git上的操作大失敗,不停push、clone,push、clone,然後就出現了很多重名文件,一不小心就直接rm -rf了,然後就潰敗在各路文件找回的方法中。
Disk Drill,EasyRecovery, Time Machine等等都有嘗試過,前兩者屬於是數據恢復軟件,過程比較慢而且有些操作會涉及到電腦的安全設置問題,類似讓你關閉防火牆或者設置一些你完全不懂的東東,emmmmmmm,最後下來因爲被刪除的是代碼文件夾,比較泛化所以也不好找,倒是意外的找到了不少以前沒注意到的一些pdf、word文件(可能是以前使用者留下的),但是,最坑爹的劇情出現了,如需恢復請充錢,付費版Emmmmmm。
當然,Mac是有自帶的備份功能和Time Machine的,但是這需要外部驅動或者提前設置,完敗,最後小編也是隻能規規矩矩重新做一份當時的項目了。
後來小編就在網友那裏得知了這個處理方法,將rm命令進行改良,設定成mv別名。
先簡單介紹一下,這個方法相當於建立了一個回收站~/.trash,將rm的功能設定成mv,將rm的所有文件剪切至回收站內,可以設定shell設置一定時間後自動刪除,這裏也可以去裏面自己進行回收站清空
防誤刪腳本:
### 重定義rm命令 ###
# 定義回收站目錄
trash_path='~/.trash'
# 判斷 $trash_path 定義的文件是否存在,如果不存在,那麼就創建 $trash_path.
if [ ! -d $trash_path ]; then
mkdir -p $trash_path
fi
# 定義別名:使用 rm 就調用 trash
alias rm=trash
# 使用 rl 就調用 'ls ~/.trash'
# 如果更改上面的回收站目錄這裏的目錄也需要修改
alias rl='ls ~/.trash'
# 使用 unrm 就調用 restorefile,需要在刪除目錄的父目錄下執行
alias unrm=restorefile
# 使用 rmtrash 就調用 claearteash
alias rmtrash=cleartrash
# 恢復文件的函數
restorefile()
{
mv -i ~/.trash/$@ ./
}
# 刪除文件的函數
trash()
{
mv $@ ~/.trash/
}
# 清空回收站的函數
cleartrash()
{
read -p "確定要清空回收站嗎?[y/n]" confirm
[ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/*
}
將上述腳本寫入 /etc/bashrc 並立即執行命令 source /etc/bashrc即可生效。若你的mac設置了zsh等其他配置只需要添加到相應的配置文件內重載即可。
相關指令
- 查看回收站下的文件——rl
- 恢復filename到當前目錄——unrm filename
- 清空回收站(會有提示)——rmtrash
問題
- 但是過程中會有一些問題出現,比如回收站不能出現重名文件,大家可以在腳本上面做一些處理
- 由於rm命令已經嫁接到mv上,所以原先的一些指令使用時會有影響,實在是確定了要刪除可以使用/bin/rm
- via 如何優雅的使用rm防止誤刪除