实现Linux系统的回收站

今天偶然看到一个有意思的shell脚本,用脚本实现Linux系统下的回收站,推荐给大家。


今天我们利用简单的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、脚本解释

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


2、设置脚本可执行权限

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

3、定时清空回收站

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

0 0 * * 0 rm -rf /.recycle

4、进行测试

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

以下是具体实现方法:

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

alias rm='sh /bin/delete'

执行source ~/.bashrc使替换立即生效


扫码或长按关注

回复「 篮球的大肚子」进入技术群聊

发布了395 篇原创文章 · 获赞 788 · 访问量 72万+

猜你喜欢

转载自blog.csdn.net/weiqifa0/article/details/104305590