Linux回收站功能的实现

RM命令改造

vim /etc/bashrc

在文件的最前端添加如下代码

#修改rm命令
alias rm=delete  #命令别名,通过delete来实现rm改为mv
alias r=delete
alias rl='ls /trash' #rl 命令显示回收站中的文件
alias ur=undelfile #ur 命令找回回收站的文件
undelfile()
{
    mv /trash/$@ ./
}
delete()
{
if [ ! -d "/trash/" ];then
         mkdir /trash
fi
\mv --backup=numbered $@ /trash/
}
cleartrash()
{
    read -p "clear sure?[n]" confirm
    [ $confirm == 'y' ] || [ $confirm == 'Y' ]  && /bin/rm -rf /trash/*
}
source /etc/bashrc

还有一种改造的方法见这里

使用原生删除

/bin/rm -rf /trash

定时清空回收站

新建一个shell文件,比如trash.sh,核心代码如下

# (empty trash)clean the trash directory
# everyday on 3am,delete all files 3 days ago 
# and write deleted files information into speacial file 
* 3 * * * find /trash/* -ctime +3 -fls /home/crontab/trash.txt
* 3 * * * find /trash/* -ctime +3 -delete
* 3 * * * /home/crontab/./trashdate.sh

一共有3行命令,执行时间都是每天凌晨三点
命令一:找到回收站中三天前伪删除的文件,并把这些文件的相信信息写入到指定文件中
命令二:找到回收站中三天前伪删除的文件,并把这些文件彻底删除
命令三:执行另外一个脚本文件,见下一个标题
然后提交给crontab

crontab trash.sh

提交完成后,这个trash.sh就可以删除了,因为trash.sh中的内容已经在执行了,当然还有其他命令

crontab -l #查看在执行的定时器任务
crontab -e #编辑定时器
crontab -r #删除定时器
crontab trash.sh #找回定时器

记录删除时间

trashdate.sh的核心代码如下

sed -i "1i$(date "+%Y-%m-%d %H:%M:%S")" /home/crontab/trash_date.txt #代码1

原来使用的是

date >> /home/crontab/trash_date.txt #代码2

代码2只是写入到文件的内容类似以下格式

Thu Jan 18 03:06:01 CST 2018

而且 >> 这个是linux到追加命令,只会把新的内容追加写入到文件末尾

而代码1就不一样了,sed -i可以把内容指定写入到某一行,再加上linux中到日期变量,最后代码1写入到文件的内容类似以下格式

2018-01-01 08:30:01

使用方式

1、删除文件时,比如文件为test.txt

rm test.txt 或者 r test.txt

这里不需要加任何参数,比如-r之类的

2、查看回收站内容

rl

要查看回收站内容详细信息,只要加个参数就好

rl -lh 

3、清空回收站

cleartrash #会弹出是否清空

4、找回被“删除“的文件

undelfile test.txt 或者 ur test.txt #把该文件还原到当前所在目录

猜你喜欢

转载自blog.csdn.net/diyangxia/article/details/79310395