千家信息网

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

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家分享的是有关shell编程实战之如何使用自定义命令del代替rm命令的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。不知道大家对在服务器上使用rm命令有什么感觉
千家信息网最后更新 2026年11月02日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 1fi

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

# 获取参数if (( $# < 1 ));then    echo "Usage ${0} file1 file2 ..."    exit 2fi# 删除文件for file in $*do    delete $filedone

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

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

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

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

# 分区剩余空间是否充足校验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 4fi

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

#!/bin/bash# 使用自定义命令del来代替rm命令export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/binexport 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 1fi# 获取参数if (( $# < 1 ));then    echo "Usage ${0} file1 file2 ..."    exit 2fi# 删除文件for file in $*do    delete $filedone

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

文件 回收站 命令 目录 参数 空间 检查 源文件 剩余 函数 备份 用户 输入 实战 编程 充足 内容 感觉 所在 文件名 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 云信互联网科技有限公司 互联网科技英文翻译 小米互联网科技园设置 互联网公司科技股 昊天互联网科技有限公司 移动互联网科技公司 注册互联网科技公司经营范围大全 互联网科技如何创业 互联网时代的科技公司 黑科技 体验场景 互联网大会 每天都有哪些好的互联网科技 启辰互联网科技 宇信科技在杭州互联网排第几 下一代互联网重大应用科技园 工业互联网科技创业 扫呗互联网科技有限公司 安徽零酒互联网科技有限公司 上海互联网科技园景观 互联网大会出现的黑科技 广东猪兼强互联网科技有限公司 猪兼强互联网科技 互联网未来科技 万易互联网科技有限公司 哈尔滨新华互联网科技 科技赋能视角下互联网保险发展 伊宁互联网科技做什么的 江苏互联网智能科技软件 广州梦谷互联网科技有限公司领导 普陀区互联网教育科技管理办法
0