2020-02-26 17:30:59

实现Linux系统的回收站

14 / 0 / 0 / 0

作者: Linux云计算网络 来源: 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)理解为:若用户回答yes,继续执行脚本;否则直接退出程序

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 使替换立即生效

PS: 如本文对您有疑惑,可加QQ:1752338621 进行讨论。

0 条评论

0
0
官方
微信
官方微信
Q Q
咨询
意见
反馈
返回
顶部