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
命令解释
- $@:传给脚本的所有参数(这里表示所有待删除的文件)
- 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技术,请微信搜索公众号秦露露
或者扫描下方二维码关注