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--------
以上仅为个人理解,不正之处请指出,谢谢。
原文地址:http://blog.51cto.com/12129628/2068066