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 ...
 
随机推荐
- git 使用遇到的问题
			
本博客只记录遇到的问题和解决方案 问题一:git上与本地不同步无法上传 先git pull origin master再git push -u origin master(实在不行或者清空本地,或者清 ...
 - 基于springboot的restful接口的单元测试示例
			
一.知识点 代码中对应的知识点 1.jsonPath github网址 1)操作符见文档 2)方法见文档 3)例子见文档 2.MockMvc(org.springframework.test.web. ...
 - Pandas 合并 concat
			
pandas处理多组数据的时候往往会要用到数据的合并处理,使用 concat是一种基本的合并方式.而且concat中有很多参数可以调整,合并成你想要的数据形式. 1.axis(合并方向):axis=0 ...
 - Mad Libs游戏1
			
简单的输入输出 输入代码 name1=input('请输入姓名:') name2=input('请输入一个句子:') name3=input('请输入一个地点:') name4=input('请输入一 ...
 - 第一个VS2015 Xaramin Android项目
			
20170323新增:VS环境配置 打开VS,菜单栏选工具(Tools) 选项\ 一般有2个地方需要修改 1 2 新建第一个项目,什么都没有修改的情况下(已经配置好环境变量)直接运行,会发现如下错误: ...
 - [C#.net]未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序
			
C#操作Execl文件常用的2种方式是NPOI和Microsoft.Jet.OleDb,前者需要引用dll,后者需要安装Office客户端 今天发现别人电脑使用Microsoft.Jet.OleDb能 ...
 - PAT 1088 三人行 模拟,坑 C
			
PAT 1088 三人行 https://pintia.cn/problem-sets/994805260223102976/problems/1038429286185074688 题目: 子曰:“ ...
 - Catalan数与出栈顺序个数,Java编程模拟
			
问题描述: 队列中有从1到7(由小到大排列)的7个整数,问经过一个整数栈后,出栈的所有排列数有多少?如果整数栈的容量是4(栈最多能容纳4个整数),那么出栈的排列数又是多少? 分析:对于每一个数字i, ...
 - HDMI EDID 处理过程
			
DDC的参数 EDID是一种VESA 标准数据格式,其中包含有关监视器及其性能的参数,包括供应商信息.最大图像大小.颜色设置.厂商预设置.频率范围的限制以及显示器名和序列号的字符串.EDID数据标准: ...
 - python 在unix下json格式显示结果
			
在使用命令号输出接口测试结果,发现无法按照期望的json格式进行显示.查阅资料发现python自带强大的工具. 直接上代码: import os,requests url = XXXXXX conte ...