之前小编在开发时因为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防止误删除