原文地址:可以与 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]78. Subsets数组子集

    Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The solut ...

  2. DevExpress数据源 BindingList<FilesList> 与BindSource 使用区别

    这两个都能实现对接girdcontrol.datasource . 我只是说我自己用的时候的差异 bingsource  bs 添加了对象 之后成为一个对象集合  你是无法用foreach (var ...

  3. CSS3美化网页!!

    一.span标签:能让某几个文字或者某个词语凸显出来        <p>           今天是11月份的<span>第一天</span>,地铁卡不打折了  ...

  4. python模块:datetime

    # Stubs for datetime # NOTE: These are incomplete! import sys from typing import Optional, SupportsA ...

  5. LwIP协议栈接口

    协议栈api函数 1.netconn_new      //UDP    TCP struct netconn*netconn_new(enum netconn_type t) 为新连接申请一个连接结 ...

  6. Reading | 《C++ Primer Plus》(未完待续)

    目录 一.概述和C++简史 1.早期语言的问题 2.面向对象编程OOP 3.泛型编程 二.入门 1.头文件 2.名称空间 3.cout输出 4.C++语句 5.函数 一.概述和C++简史 C++融合了 ...

  7. mysql最基础命令

    1:使用SHOW语句找出在服务器上当前存在什么数据库:mysql> SHOW DATABASES;2:2.创建一个数据库MYSQLDATAmysql> Create DATABASE MY ...

  8. git 命令(提高篇)的本质理解

    上一篇博客:[[git 命令(提高篇)的本质理解] (http://www.cnblogs.com/juking/p/7105744.html)]介绍了Git 的基础知识 -- 提交.分支以及在提交树 ...

  9. VS工具栏没有出现可用工具的情况

    (1)没有切换到资源视图,打开具体的对话框. (2)如果你在调试状态,即使打开了具体的对话框,VS工具箱还是不会出现可用的控件的.所以不要在调试状态下添加控件.

  10. 剑指offer编程题Java实现——面试题13在O(1)时间内删除链表节点

    题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点. 由于给定的是单向链表,正常删除链表的时间复杂度是查找链表的时间复杂度即O(n),如果要求在O(1)时间复杂度内删除节点 ...