Linux学习总结(六十七)rm命令限制脚本

需求背景:
linux 系统的rm -rf 命令太危险,一步小心就会删除掉系统文件。写个shell脚本来替换该命令,要求当删除一个文件或者目录时,都要做一个备份,然后再删除。
下面分两种情况做练习:
1 简单:
假设有一个很大的分区/data/,每次删除文件或者目录时,都要先在/data/下面创建一个隐藏目录,以日期/时间命名,比如/data/201703271012/,然后把所有删除的文件都同步到该目录下,可以使用rsync -R把文件路径一起同步。

#!/bin/bash
filname=$1
big_filesystem=/data/
if [ ! -e $1 ];then
    echo "$1 不存在,请使用绝对路径"
    exit
fi
d=`date +%F-%T`
read -p "你确定要删除该文件 $1 吗?y|n:" c
case $c in
y|Y)
    mkdir -p $big_filesystem/.$d && rsync -aR $1 $big_filesystem/.$d/  && /bin/rm -rf $1
    ;;
n|N)
    exit 0
    ;;
*)
echo "请输入'y'或者'n'."
;;
esac

2 复杂:
不知道哪个分区有剩余空间,在删除之前先计算要删除的文件或者目录大小,然后对比系统的磁盘空间,如果够则按照上面你的规则创建隐藏目录,并备份,如果没有足够空间,要提醒用户没有足够空间备份并提示是否放弃备份,如果用户选择y,则直接删除文件或者目录,如果选择n,则提示未删除,然后退出脚本。

分析:该需求主要难点在于计算目录或者文件大小,还有计算本机剩余磁盘空间最大的分区大小。二者我们都以kb为单位,用正则找出对应的数值。然后做比较就可以。

f_size=du -sk filename |awk '{print $1}' //文件大小
disk_size=df -k |sed -n '2,$'p |sort -n -k4 |awk '{print $4}' |tail -1  //磁盘剩余最大空间大小
big_filesystem=df -k |sed -n '2,$'p |sort -n -k4 |tail -1 |awk '{print $NF}'  //磁盘最大剩余空间挂载点
#!/bin/bash
filename=$1
if [ ! -e $1 ];then
echo "$1 不存在,请使用绝对路径。"
exit
fi
d=`date +%F-%T`
f_size=`du -sk $1 |awk '{print $1}'`
disk_size=`df -k |sed -n '2,$'p |sort -n -k4 |awk '{print $4}' |tail -1`
big_filesystem=`df -k |sed -n '2,$'p |sort -n -k4 |tail -1 |awk '{print $NF}'`
if [ $f_size -lt $disk_size ];then
read -p "你确定要删除文件 $1 吗?y|n:" c
case $c in
y|Y)
    ;;
n|N)
    exit 0
    ;;
*)
echo "请输入'y'或者'n'."
;;
esac
else
echo "空间不足,无法备份文件$1"
read -p "你确定要删除文件 $1 吗?y|n:" c
case $c in
y|Y)
echo "将会在5秒中之后进行无备份删除文件"
for i in `seq 1 5`;do echo -ne ".";sleep 1;done
echo
/bin/rm -rf $1
;;
n|N)
echo “删除取消”
exit 0
;;
*)
echo "请输入'y'或者'n'."
;;
esac
fi

猜你喜欢

转载自blog.51cto.com/12606610/2136119