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 ...
随机推荐
- 22. Generate Parentheses产生所有匹配括号的方案
[抄题]: Given n pairs of parentheses, write a function to generate all combinations of well-formed par ...
- CSS的六大选择器
选择器:选择器是一种模式,用于选择需要添加样式的元素. 首先简述六大选择器 基本选择器 标签选择器 类选择器 ID选择器 高级选择器 层次选择器 结构伪类选择器 属性选择器 其中基本选择器与层次选择器 ...
- 设计模式学习心得<工厂方法 Factory Method>
概述 意图 业务代码中常常有构造对象的过程,它拥有大量的参数.并且有很多地方需要这对象. 简化对象构造过程. 主要解决 一个类在不同场景的频繁地创建,让不同对象的创建更有语义化,提高代码复用性. 何时 ...
- 【转】C#单元测试,带你快速入门
[转]C#单元测试,带你快速入门 注:本文示例环境 VS2017 XUnit 2.2.0 单元测试框架 xunit.runner.visualstudio 2.2.0 测试运行工具 Moq 4.7.1 ...
- git stash错误小记
git出错小记 想要push代码,我们经常这样做. 1.查看状态 git status 2.隐藏本地编辑的新内容 git stash 3.拉远程的代码 git pull 这一步操作有的时候会报错,没有 ...
- java生成pdf文件 --- Table
Java利用itext实现导出PDF文件 所需要的jar包:com.lowagie.text_2.1.7.v201004222200.jar jar包下载地址:http://cn.jarfire.or ...
- dom4j 使用原生xpath 处理带命名空间的文档
测试文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o ...
- MySQL数据库插入中文乱码解决方法
在mysql数据库中,插入中文数据时,会出现乱码的现象. 我的测试方法: 首先用Navicat for MySql 插入一行数据,带有中文的. 再用mysql命令行来查看插入的数据,看是否出现乱码. ...
- Jmeter安装与实例
安装步骤: 安装环境:Windows7 安装包:JDK安装包:Jmeter安装包: 环境变量配置:变量名JAVA_HOME 值:jdk的安装路径 变量名CLASSPATH值:.;%JAV ...
- DevExpress--TreeList节点添加图片
这个过程相对来说比较简单,网上也有不少资料,但是自己在做过之后为了记住,算是给自己写一个博客吧. 下面直接上具体的流程 1.前提 控件使用的都是DevExpress和winform的原生控件两种: 2 ...