Linux学习作业-回收站的设置

Linux回收站–用shell脚本制作一个简易回收站

需要满足的要求

  1. 编写一个脚本 – myrm.sh,删除文件,具有回收站的功能,删除的文件都存放到/my_backup 目录下;
  2. 编写一个可以恢复删除文件的脚本my_back.sh,能够把删除的文件恢复到原来的路径。
首先思考删除脚本 – myrm.sh的制作
  • 该要求看似是需要删除文件,实际上进行的操作无非是将当前文件夹下想要删除的文件移动到 /my_back 目录下
  • 这个要求可以通过 mkdir 、mv 两个语句便可实现该功能

思考到这里可以开始写脚本代码了

#!/bin/bash
# mkdir 每次都创建保证该文件夹存在
mkdir /my_backup
# 用 mv 语句对想要删除的代码进行移动 用以达到看起来像删除的目的
# 这个地方 $* 代表该脚本可以传入多个参数,能够进行多项文件的删除
mv $* /my_backup
# 然后可以使用ls语句对回收站的文件进行查看
ls /my_backup

这个地方考虑到 mkdir 语句在已经有该文件夹的情况下比较多余,于是想对上面的代码进行改良:如果在文件夹已经存在的情况下,就不使用 mkdir 语句怎么办?(别问,问就是处女座)
这个时候可以用 test 方法对文件是否存在进行测试:
简单补充 test 语句的使用

test -d /bin/lianxi  # 这是判断 bin 目录下是否有一个名字叫 lianxi 的文件夹

[ -d /bin/lianxi ] # 这是上面语句的等价写法,能达到一样的目的

test -f /etc/passwd  # 这是判断 etc 目录下是否有个文件名叫做passwd的文件

[ -f /etc/passwd ] # 这是上面语句的等价写法

用上述语句进行判断会有一个返回值,当返回值( $? )为0的时候,证明该 文件/文件夹 存在,其他情况就是说明该 文件/文件夹 不存在。

因此,用这个语句加上 if-then-else-fi 的流程控制语句便可完成代码的改良:

#!/bin/bash
if [ -d /my_backup ]  # 这样,当/my_backup存在的时候 就不会再用一个多余的 mkdir 语句了,看起来代码更舒服啦!
then
	mv $* /my_backup
	ls /my_backup
else
	mkdir /my_backup
	mv $* /my_backup
	ls /my_backup
fi
然后开始思考恢复脚本 – my_back.sh的制作
  • 在开始恢复脚本的制作的时候,首先得想好如何才能达到这样的目的;
  • 最容易想到的就是日志文件,可以通过每次删除记录日志,恢复之后删除日志的方式,完成恢复操作;
  • 日志文件需要记录的内容:文件名 和 原本的储存路径。

ok,想到之后就开始实践,首先对上面的删除脚本 – myrm.sh 进行修改,增加一个储存到日志的语句

#!/bin/bash
if [ ! -d /my_backup ]  # 不存在就创建 注意这里改了一下代码 加了个!
then
	mkdir /my_backup
	touch /my_backup/logging.txt
else
	touch /my_backup/logging.txt
fi
# 增加一个 for 的流程控制语句,将内容重定向到日志文件中
for temp in $*
do
	a=$(find / -name $temp)
	echo $temp $a >> /my_backup/logging.txt
done
# 然后再使用 mv 语句,达到删除的目的
mv $* /my_backup

ls /my_backup

开始写恢复脚本

  • 接收参数 – 想要恢复的文件名;
  • 在日志文件中找到想要恢复的文件的文件名,进行恢复;
  • 恢复完成之后要记得删除日志,不然如果下次恢复同样的文件会出错。
#!/bin/bash

# 通过 for 循环的流程控制,可以恢复多个文件
for temp in $*
do
	a_path=$(cat /my_backup/logging.txt|grep $temp|awk '{print $2}')
	a_num=$(cat /my_backup/logging.txt|grep -n $temp|awk -F':' '{print $1}')
	mv /my_backup/$temp $a_path
	sed -i "${a_num}d" /my_backup/logging.txt
done
  • 通过上面的 myrm.sh 和 my_back.sh 就能达到这种简单的回收站的效果。
  • 然后可以使用语句: chmod +x 脚本文件名 对脚本文件授予可执行的权限。
  • 再使用 alias 语句对 rm 进行别名的设置,就达到了使用 rm 语句删除文件并设置回收站的效果了。

同样 该简易回收站存在如下问题:

  1. 碰到同名文件就傻眼了;
  2. 在恢复的时候可以考虑加一个 if 的流程控制进行判断,如果目标文件存在就进行恢复,不存在就告诉用户想要恢复的文件不存在。

目前存在这些问题吧 可以在后面的学习过程中尝试改进,如果更好的想法可以一起交流!

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wx-zhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值