原文地址:可以与 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';

删除 ~/.bashrctoBackupcheckDelDir 两个函数,并替换之前的别名定义

alias rm=toBackup
替换为
alias rm=/usr/bin/safe-rm

bash回收站的更多相关文章

  1. 萌新笔记——linux下(ubuntu)反删除(误删恢复)与回收站制作

    刚刚有个小伙伴不小心删了他写了好几的天代码,为他心疼之余帮他找回了文件. 想到我之前也常常误删一些文件,就干脆分享一下我的反删除方法,并说说我做的回收站(好low的,求大神指点) 首先是反删除软件ex ...

  2. Centos实现回收站机制

    作为一个运维人员,在服务器上删除文件时为了方便经常会直接使用rm *.txt这类通配符,甚至为了省事加-rf参数,如果是确定的话还好,要是在删除的时候一个不留神,那事可就大了. 俗话说常在河边站哪有不 ...

  3. Shell基础-ech0,cat,history,alias,unalias,bash快捷键,wc,执行结果写入文件

    1 系统所支持的shell存放于 /etc/shells 文件中,shell脚本的开头 #!/bing/bash 是指定使用的脚本类型 不能省略,省略之后有些文件可以执行,但容易出错 这行不是注释 2 ...

  4. Linux命令行–基本的bash shell命令

    启动shell: /etc/passwd:包含系统用户账户列表以及每个用户的基本配置信息 每个条目有七个字段,每个字段用冒号隔开 用户名 用户密码 用户的系统UID 用户的系统GID 用户的全名 用户 ...

  5. 将linux下的rm命令改造成移动文件至回收站【转】

    转自:http://blog.csdn.net/a3470194/article/details/16863803 [-] 将linux下的rm命令改造成移动文件至回收站 将AIX下的rm命令改造成移 ...

  6. centos rm 回收站

    桌面版本的linux就默认有,非桌面版本貌似没(反正我没找到) linux rm删除文件之后,恢复就比较麻烦了,即使恢复了,文件名格式都变成一串数字了. 修改root用户的环境变量 vi ~/.bas ...

  7. 云服务器 ECS Linux 系统添加“回收站”

    删除是危险系数很高的操作,一旦误删可能会造成难以估计的损失.在云服务器 ECS Linux 系统中这种危险尤为明显.比如,一条简单的语句:rm –rf /* 就会把整个系统全部删除,而 Linux 并 ...

  8. 为rm命令增加回收站功能

    rm是个强大的命令,特别是rm -rf有时候强大到让你欲哭无泪,当你想清除当前目录下的所有文件和目录时,很简单 $sudo rm -rf ./* 这没什么,但是,但是如果不小心打成这样 $sudo r ...

  9. 【Linux相识相知】bash的基础特性

    命令历史 shell进程会记录用户提交执行过的命令 可以是用history查看: [root@localhost dev]# history ss -tnl ifconfig vi /etc/sysc ...

随机推荐

  1. [leetcode]19. Remove Nth Node From End of List删除链表倒数第N个节点

    Given a linked list, remove the n-th node from the end of list and return its head. Example: Given l ...

  2. node.js中stream流中可读流和可写流的使用

    node.js中的流 stream 是处理流式数据的抽象接口.node.js 提供了很多流对象,像http中的request和response,和 process.stdout 都是流的实例. 流可以 ...

  3. Vmware unknow Interface ens33

    vmare打开虚拟网络编辑器,按图示操作

  4. Linux驱动之按键驱动编写(中断方式)

    在Linux驱动之按键驱动编写(查询方式)已经写了一个查询方式的按键驱动,但是查询方式太占用CPU,接下来利用中断方式编写一个驱动程序,使得CPU占有率降低,在按键空闲时调用read系统调用的进程可以 ...

  5. [快速幂][NOIP2012]转圈游戏

    转圈游戏 题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置, ...

  6. 第五次spring会议

    昨天所做之事: 昨天我对软件加上了换肤和透明度等功能. 今天所做之事: 我对软件加上了保密功能. private void 一键转密文ToolStripMenuItem_Click(object se ...

  7. mysql 地理位置定位

    SET @pt2 = ST_GeomFromText('POINT(116.405289 39.904987)'); SELECT *,ST_Distance_Sphere(ST_GeomFromTe ...

  8. vue路由跳转到指定页面

    1.this.$router.push({name:'Home'}) 2.this.$router.push({path:'/view'}) 3.this.$router.replace({name: ...

  9. js中push和pop的用法

    push: 将新元素追加到一个数组中,并返回新的数组长度: 语法:arrayObj.push([item1 [item2 [. . . [itemN ]]]]) var number; var my_ ...

  10. 背水一战 Windows 10 (65) - 控件(WebView): 对 WebView 中的内容截图, 通过 Share Contract 分享 WebView 中的被选中的内容

    [源码下载] 背水一战 Windows 10 (65) - 控件(WebView): 对 WebView 中的内容截图, 通过 Share Contract 分享 WebView 中的被选中的内容 作 ...