码迷,mamicode.com
首页 > 系统相关 > 详细

Linux系统的rm命令太危险,一不小心就会删除系统文件。写一个shell脚本来替换系统的rm命令,

时间:2018-02-02 14:17:28      阅读:411      评论:0      收藏:0      [点我收藏+]

标签:delete   文件同步   创建文件夹   bin   报错   you   /tmp   应该   删除一个文件   

Linux系统的rm命令太危险,一不小心就会删除系统文件。写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时都要做一个备份,然后再删除。

假设有一个大的分区/data/,每次删除文件或者目录前,都要在/data/下面创建一个隐藏目录,以日期/时间命名,比如/data/.201802021054,然后把所有删除的文件同步到该目录下面,可以使用rsync -R把文件路径一同同步


答案:

#!/bin/bash
d=`date +%Y%m%d%H%M`
read -p "Are you sure delete the file or directory $1? y|n:"  c
if [ $c == "y" ] || [ $c == "Y"]
then
      mkdir /data/.$d
      rsync -aR $1/   /data/.$d
      /bin/rm -rf $1
elif [ $c == "n"] || [ $c == "N"]
then
      exit 0
else
     echo "Please input y or n"
fi

解析:首先声明一个变量$d,将日期命令(date +%Y%m%d%H%M)的执行结果赋值给变量d,这里用到了反引号(``),作用就是将反引号中命令的运行结果反馈出来。使用read -p 将输入结果赋值给变量$c。


          使用if进行判断,这里首先说明几个命令的作用,[]中括号里面是判断的条件,两边都要有空格,条件判断符“==”两边也要有空格, ||是或者的意思。那么,整段的含义是:如果$c全等于字符串y或者Y,则执行 mkdir 创建文件夹,执行rsync同步命令,最后执行删除命令。再如果,$c全等于字符串n或者N,则退出,否则(以上两种情况都不包含,输出echo“please input y or n”)。

         

         单独说明 rsync -aR $1/   /data/.$d。其实完整的写法应该是 rsync -aR $1/ /data/.$d/$1,但是这样写,如果$1的值为一个绝对路径,如:/tmp/1.txt,那么代入会发现

rsync -aR /tmp/1.txt  /data/.201802021122//tmp/1.txt。多了一个/会报错,所以省略了/$1,避免这种情况。


-------习题来源阿铭Linux--------

以上仅为个人理解,不正之处请指出,谢谢。

Linux系统的rm命令太危险,一不小心就会删除系统文件。写一个shell脚本来替换系统的rm命令,

标签:delete   文件同步   创建文件夹   bin   报错   you   /tmp   应该   删除一个文件   

原文地址:http://blog.51cto.com/12129628/2068066

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!