shell编程实战之如何使用自定义命令del代替rm命令

  • 作者:zccc
  • 来源:网络
  • 2020-09-22 12:03:32

建站服务器 这篇文章给大家分享的是有关shell编程实战之如何使用自定义命令del代替rm命令的内容。小编觉得挺实用的,因此分享给大家做个参...

建站服务器

这篇文章给大家分享的是有关shell编程实战之如何使用自定义命令del代替rm命令的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

不知道大家对在服务器上使用rm命令有什么感觉,反正每次我使用的时候,都会好好确认,即使这样,按下回车的时候,心里还是会有点慌慌的感觉。因为和windows系统不一样,使用win系统默认删除文件,该文件就会被放入到回收站中,想要恢复直接从回收站找到文件并恢复即可。但是在linux中,用rm删除文件,那就是真的删除掉了,是没有回收站这个概念的。

真因为rm命令的危险性,所以想要不自己写一个shell脚本,用来删除文件。自己定义的这个命令删除文件时,会将原文件的位置移动“回收站”目录,然后再将原文件给删除掉。如果误删了,就可以从回收站中找到该文件并恢复。

首先,第一步,我们需要先创建回收站目录,如果已经有了此目录从不用重新创建

# 回收站目录
DEL_BAK_DIR="/root/.delbak"

if [ ! -d "$DEL_BAK_DIR" ];then
    mkdir "$DEL_BAK_DIR" || exit 1
fi

然后我们来获取用户输入的参数,循环遍历有所参数,调用删除函数来删除。当然,我们首先需要检查用户是否输入了参数,如果用户没有输入参数那么就直接退出程序,不往下走了。

# 获取参数
if (( $# < 1 ));then
    echo "Usage ${0} file1 file2 ..."
    exit 2
fi

# 删除文件
for file in $*
do
    delete $file
done

最后,我们需要编写delete这个函数了。这个函数应该有哪些功能呢?首先,它肯定能对待删除的文件名做检查,如果不是文件或目录,它就不继续往下走了。另外,每次将删除文件放到回收站目录前,应该对回收站目录所在分区剩余空间做检查,如果空间不足也不往下走。

下面是文件是否存在的检查

if [ ! -e $1 ];then
    echo "file $1 is not exists"
    exit 3
fi

而关于分区空间的检查则稍微复杂些。首先,我们要获取到回收站目录所在分区剩余空间,然后获取到待删除文件的大小,拿这两个数据做对比。

# 分区剩余空间是否充足校验
part_free=$(df -k $DEL_BAK_DIR | grep -iv filesystem | awk '{print $4}')
file_size=$(du -ks $1 | awk '{print $1}')   
 
if (( part_free > file_size))
then
    # 备份且删除源文件
    ……
else
    echo "The disk size is not enough"
    exit 4
fi

到这步,所有的准备工作都做好了,就差最后的备份源文件,然后删除源文件了。下面给出完整的代码:

#!/bin/bash
# 使用自定义命令del来代替rm命令

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/bin
export LANG=en

# 回收站目录
DEL_BAK_DIR="/root/.delbak"

function delete ()
{
    # 文件名是否存在校验
    if [ ! -e $1 ];then
        echo "file $1 is not exists"
        exit 3
    fi
    
    # 分区剩余空间是否充足校验
    part_free=$(df -k $DEL_BAK_DIR | grep -iv filesystem | awk '{print $4}')
    file_size=$(du -ks $1 | awk '{print $1}')    
    
    if (( part_free > file_size))
    then
        # 备份且删除源文件
        now=$(date +%Y%m%d%H%M)
        if [ ! -d "$DEL_BAK_DIR/.$now" ];then
            mkdir "$DEL_BAK_DIR/.$now" || exit 5
        fi
        
        mv -f $1 $DEL_BAK_DIR/.$now/$(basename $1)
    else
        echo "The disk size is not enough"
        exit 4
    fi
}

if [ ! -d "$DEL_BAK_DIR" ];then
    mkdir "$DEL_BAK_DIR" || exit 1
fi

# 获取参数
if (( $# < 1 ));then
    echo "Usage ${0} file1 file2 ..."
    exit 2
fi

# 删除文件
for file in $*
do
    delete $file
done

感谢各位的阅读!关于shell编程实战之如何使用自定义命令del代替rm命令就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

<a href=http://www.xinnet.com target=_blank>新网</a><a href=http://www.xinnet.com target=_blank>虚拟主机</a>

  • 相关专题

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:operations@xinnet.com进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

相关文章

免费咨询获取折扣