bash回收站
原文地址:可以与 safe-rm 协同工作的 bash 回收站
将以代码放进 ~/.bashrc,并执行 source ~/.bashrc 命令即可开始使用
该脚本在用户目录下建立 .delete 文件夹作为回收站,并替换 rm 命令为 toBackup 方法,将删除文件的动作替换为把文件移动至 .delete/删除日期 并重命名为 删除时间-文件名-随机数 的格式
lsdel 用于查看今天删除了哪些文件
cleandel 用于清除回收站
# for rm {{
DEL_TIME=$(date +%H%M%S)
BAK_DATE=$(date +%Y%m%d)
RANDOM=$(date +%s%N | cut -c 6-13)
checkDelDir ()
{
if [ ! -d ~/.delete ]; then
mkdir ~/.delete
fi
if [ ! -d ~/.delete/${BAK_DATE} ]; then
mkdir ~/.delete/${BAK_DATE}
fi
}
toBackup()
{
checkDelDir
for thing in $@
do
echo ${thing} | grep '^-' > /dev/null
if [ ! $? = 0 ]; then
thing_name=${thing##*/}
rnd=${RANDOM}
mv ${thing} ~/.delete/${BAK_DATE}/${DEL_TIME}-${thing_name%*/}-${rnd}
echo rename ${thing} to ${DEL_TIME}-${thing_name%*/}-${rnd} and mv to ~/.delete/${BAK_DATE}
fi
done
}
cleanDelete()
{
echo 'Clear all backup files?[Y/N]'
read confirm
if [[ ${confirm} = 'y' || ${confirm} = 'Y' ]]; then
/bin/rm -rf ~/.delete/*
elif [[ ${confirm} = 'n' || ${confirm} = 'N' ]]; then
echo 'Delete is cancelled by user.'
else
echo 'Delete is cancelled because user not press anything.Press y or Y to confirm delete.'
fi
}
listDelete()
{
echo 'ls ~/.delete/${BAK_DATE}'
echo 'Only list what you delete today.'
echo
ls ~/.delete/${BAK_DATE}
}
alias rm=toBackup
alias lsdel=listDelete
alias cleandel=cleanDelete
# }}
以下脚本配合 safe-rm 使用
在 /usr/bin 目录下创建 bashrc-rm 文件,并赋予执行权限
touch /usr/bin
chmod +x /usr/bin/bashrc-rm
将以下代码写进 bashrc-rm
#!/bin/bash
date=/bin/date
cut=/usr/bin/cut
mkdir=/bin/mkdir
echo=/bin/echo
mv=/bin/mv
grep=/bin/grep
DEL_TIME=$(${date} +%H%M%S)
BAK_DATE=$(${date} +%Y%m%d)
RANDOM=$(${date} +%s%N | ${cut} -c 6-13)
checkDelDir ()
{
if [ ! -d ~/.delete ]; then
${mkdir} ~/.delete
fi
if [ ! -d ~/.delete/${BAK_DATE} ]; then
${mkdir} ~/.delete/${BAK_DATE}
fi
}
toBackup()
{
checkDelDir
for thing in $@
do
${echo} ${thing} | ${grep} '^-' > /dev/null
if [ ! $? = 0 ]; then
thing_name=${thing##*/}
rnd=${RANDOM}
${mv} ${thing} ~/.delete/${BAK_DATE}/${DEL_TIME}-${thing_name%*/}-${rnd}
${echo} rename ${thing} to ${DEL_TIME}-${thing_name%*/}-${rnd} and mv to ~/.delete/${BAK_DATE}
fi
done
}
toBackup $*
替换 safe-rm 脚本中执行删除操作时调用的命令
该变量在 safe-rm 0.12 版本中定义于 107 行附近
my $real_rm = '/bin/rm';
替换为
my $real_rm = '/usr/bin/bashrc-rm';
删除 ~/.bashrc 中 toBackup 和 checkDelDir 两个函数,并替换之前的别名定义
alias rm=toBackup
替换为
alias rm=/usr/bin/safe-rm
bash回收站的更多相关文章
- 萌新笔记——linux下(ubuntu)反删除(误删恢复)与回收站制作
刚刚有个小伙伴不小心删了他写了好几的天代码,为他心疼之余帮他找回了文件. 想到我之前也常常误删一些文件,就干脆分享一下我的反删除方法,并说说我做的回收站(好low的,求大神指点) 首先是反删除软件ex ...
- Centos实现回收站机制
作为一个运维人员,在服务器上删除文件时为了方便经常会直接使用rm *.txt这类通配符,甚至为了省事加-rf参数,如果是确定的话还好,要是在删除的时候一个不留神,那事可就大了. 俗话说常在河边站哪有不 ...
- Shell基础-ech0,cat,history,alias,unalias,bash快捷键,wc,执行结果写入文件
1 系统所支持的shell存放于 /etc/shells 文件中,shell脚本的开头 #!/bing/bash 是指定使用的脚本类型 不能省略,省略之后有些文件可以执行,但容易出错 这行不是注释 2 ...
- Linux命令行–基本的bash shell命令
启动shell: /etc/passwd:包含系统用户账户列表以及每个用户的基本配置信息 每个条目有七个字段,每个字段用冒号隔开 用户名 用户密码 用户的系统UID 用户的系统GID 用户的全名 用户 ...
- 将linux下的rm命令改造成移动文件至回收站【转】
转自:http://blog.csdn.net/a3470194/article/details/16863803 [-] 将linux下的rm命令改造成移动文件至回收站 将AIX下的rm命令改造成移 ...
- centos rm 回收站
桌面版本的linux就默认有,非桌面版本貌似没(反正我没找到) linux rm删除文件之后,恢复就比较麻烦了,即使恢复了,文件名格式都变成一串数字了. 修改root用户的环境变量 vi ~/.bas ...
- 云服务器 ECS Linux 系统添加“回收站”
删除是危险系数很高的操作,一旦误删可能会造成难以估计的损失.在云服务器 ECS Linux 系统中这种危险尤为明显.比如,一条简单的语句:rm –rf /* 就会把整个系统全部删除,而 Linux 并 ...
- 为rm命令增加回收站功能
rm是个强大的命令,特别是rm -rf有时候强大到让你欲哭无泪,当你想清除当前目录下的所有文件和目录时,很简单 $sudo rm -rf ./* 这没什么,但是,但是如果不小心打成这样 $sudo r ...
- 【Linux相识相知】bash的基础特性
命令历史 shell进程会记录用户提交执行过的命令 可以是用history查看: [root@localhost dev]# history ss -tnl ifconfig vi /etc/sysc ...
随机推荐
- java重写equals方法需要注意的几点
为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往 ...
- redis在游戏服务器中的使用初探(二) 客户端开源库选择
上文提到 搭建完成后 我们选择客户端的开源库进行连接 有以下三种选择 1 acl-redis 原因是支持VC 国产 作者博客 acl 框架库简介 用 acl 库编写高效的 C++ redis ...
- c++沉思录 学习笔记 第六章 句柄(引用计数指针雏形?)
一个简单的point坐标类 class Point {public: Point():xval(0),yval(0){} Point(int x,int y):xval(x),yval(y){} in ...
- 【APP测试(Android)】--交叉事件
- Linux学习笔记:常用命令
个人常用的Linux命令总结(持续更新): 切换目录:cd 列出目录下面的文件:ls 显示当前所在的目录:pwd 操作文件 新建文件:touch file01 查看文件内容:less more cat ...
- Linux 第十二天
文件系统 1.分区类型 主分区:总共最多只能分四个 扩展分区:只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多有四个.但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用. 逻辑 ...
- vue里router-link标签设置动态路由的3个方法
1.to绑定data里面的一个值 2.to绑定一个对象,用name 3.to绑定一个对象,用path 例子: <router-link :to="home"><s ...
- Maths | 相关接收机与最大似然准则
目录 一. 接收机的概念 1.信号解调器 2.检测器 二. 相关解调器的解调过程及其原理 1.构造相关解调器 2.得到接收信号在基向量上的投影 3.相关器输出的性质 三.检测器的实现及其数学原理 1. ...
- Html5与Css3知识点拾遗(三)
文本 small:包括免责申明.注意事项.法律限制.版权信息,只适用于短于,常包含在页面级的footer里 H5对i和b的重新定义 b:提醒文字.不传达任何额外的语气.文档摘要关键词.评论中的产品名. ...
- HSmartWindowControl之安装篇 (Visual Studio 2013 & Halcon 18)
1.环境简介 Visual Studio 2013社区版 Halcon18.05 2.使用Nuget在VS工程中安装Halcon插件 搜索栏输入关键字halcon,出现两个插件,分别是halcon语言 ...