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 ...
随机推荐
- Python 多进程编程之multiprocessing--Pool
Python 多进程编程之multiprocessing--Pool ----当需要创建的子进程数量不多的时候,可以直接利用multiprocessing 中的Process 动态生成多个进程, -- ...
- oracle序列的使用
第一天:序列的使用 在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方. 1.Create Sequence 你首先要有CREATE SEQ ...
- 【算法】map的应用
map使用参考链接http://www.cnblogs.com/KID-XiaoYuan/articles/7297709.html 题目 在ACM比赛中,你每解决一道题,你就可以获得一个气球,不同颜 ...
- http协议介绍及get与post请求、响应状态码
HTTP: 通信双方如果想要通信就必须遵循一定的规则,我们把这个规则称之为HTTP协议! 报文: HTTP协议通信的内容我们称之为:报文 报文格式: 报文首部 空行 报文主体 1.请求报文 ...
- VM无法连接到虚拟机
The VMware Authorization Service is not running. 原因 虚拟机服务没有开启 解决方法 1. 我的电脑右击->管理 2. 打开服 ...
- selenium_unittest框架,TestCase引用
新手,纯属个人理解,有问题可以给出建议奥~谢谢. 如以下代码,每一个test的类都是一个测试方法而测试方法必须由test_xxx开头命名,非test开头可能会执行不到,执行顺序如test1,test2 ...
- shell脚本学习- 传递参数
跟着RUNOOB网站的教程学习的笔记 我们可以在执行shell脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n代表一个数字,1为执行脚本的第一参数,2为执行脚本的第二个参数,以此类推... 实 ...
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记十六之铭文升级版
铭文一级: linux crontab 网站:http://tool.lu/crontab 每一分钟执行一次的crontab表达式: */1 * * * * crontab -e */1 * * * ...
- windows更改命令行cmd的字体为conlosas+微软雅黑
windows更改命令行cmd的字体为conlosas+微软雅黑 动力来源于对美孜孜不倦的追求~ 下载conlosas+微软雅黑字体 谢谢支持. 将解压后的YaHei.Consolas.1.12.tt ...
- Android中的EventBus
1.分析 EventBus是一个针对Android的事件发布和订阅的框架,主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传 ...