实现Linux系统的回收站

Linux系统默认没有回收站功能,使用rm命令进行删除操作,文件就会直接从系统中删除,很难恢复。

今天我们利用简单的shell脚本实现Linux系统下的回收站机制。

先提供脚本代码

[root@qll251 ~]# vim /bin/delete
  1 #! /bin/bash
  2 [ ! -d /.recycle ] && mkdir -v /.recycle && chmod 777 /.recycle
  3
  4 if  [ $# -eq 0 ]; then
  5   echo "Usage: delete file1 [file2 file3...]" && exit 6
  6 fi
  7
  8 read -p "Are you sure you want to delete it? [Y/N]: " action
  9 case $action in
 10         y)  ;;
 11         Y)  ;;
 12         *)  exit
 13 esac
 14
 15 for file in $@; do
 16     now=`date +%Y-%m-%d-%H:%M:%S`
 17     newfile=`basename $file`
 18     mv $file /.recycle/$newfile.$now && echo "$file is deleted!"
 19 done

一、脚本解释

1)在/bin目录下创建脚本文件delete(方便系统用户直接调用delete命令)

2)首先判断回收站文件夹是否创建;如未创建,则创建/.recyscle;同时设置权限777

[ ! -d /.recycle ] && mkdir -v /.recycle && chmod 777 /.recycle

3)判断传给脚本的个数是否为0,如果为真,则输出帮助信息,同时终止脚本

if  [ $# -eq 0 ]; then
  echo "Usage: delete file1 [file2 file3...]" && exit 6
fi

4)设置一个用户交互,类似Windows的弹窗提醒
(接收用户的输入,将其放入action变量)

read -p "Are you sure you want to delete it? [Y/N]: " action

5)理解为:收到用户的同意信号,继续执行执行脚本;否则直接退出程序

case $action in
        y)  ;;
        Y)  ;;
        *)  exit
esac

6) 将目标文件根据当前时间重命名后移动到/.recycle
命令解释

  1. $@:传给脚本的所有参数(这里表示所有待删除的文件)
  2. basename:去掉路径信息,返回纯粹的文件名
for file in $@; do
    now=`date +%Y-%m-%d-%H:%M:%S`
    newfile=`basename $file`
    mv $file /.recycle/$newfile.$now && echo "$file is deleted!"
done

二、设置脚本可执行权限

[root@qll251 ~]# chmod +x /bin/delete

三、定时清空垃圾箱

执行crontab -e,设置每周执行清空回收站动作

0 0 * * 0 rm -rf /.recycle

四、进行测试

在这里插入图片描述

如果delete命令用着不习惯,我们也可以给rm配置别名。将rm命令替换为delete

以下是具体实现方法:

编辑~/.bashrc文件,增加一行

alias rm='sh /bin/delete'

执行source ~/.bashrc使替换立即生效
在这里插入图片描述

更多IT技术,请微信搜索公众号秦露露或者扫描下方二维码关注

在这里插入图片描述

posted @ 2020-02-13 12:37  开源Linux  阅读(974)  评论(0编辑  收藏  举报