• shell实现文件自动归档功能


    最近有一个业务需求,是要将服务器上指定目录的文件每天进行保存,并将文件保存在/root目录下,所以考虑使用shell完成此功能

    1.判断参数个数

    因为需要被归档文件的目录是根据业务需求调整的,所以执行shell脚本的时候,应该将这个目录名称作为参数传入,也只有这一个参数,在此文档里假设为/root/linux_project,可以通过以下脚本实现此部分功能,并将脚本命名为archive.sh

    #!/bin/bash
    
    #首先判断输入的参数个数是否为1个
    if [ $# != 1 ]
    then
            echo "参数个数不为1,应该只输入1个参数,是需要被归档文件的目录名"
    exit
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    我们可以先不加参数,直接执行sh archive.sh,就会显示

    参数个数不为1,应该只输入1个参数,是需要被归档文件的目录名
    
    • 1

    添加1个参数后,则会正常执行sh archive.sh /root/linux_project

    2.获取参数的路径名称

    需要对入参的属性进行判断,只有目录才可以做下一步的操作

    if [ -d $1 ] #判断参数是否为文件夹
    then
            echo "参数是目录,符合要求"
    else
            echo "参数不是目录,不符合要求"
    exit
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    并通过以下两句获取目录的路径

    DIRNAME=$(basename $1)
    DIR_PATH=$(cd $(dirname $1); pwd) #此处是为了取绝对路径
    
    • 1
    • 2

    3.获取归档日期

    因为需要每天归档,所以需要将当前日期作为后缀放在路径下
    这一步只需要一句DATE=$(date +%Y%m%d)就可以实现

    4.定义生成的归档文件名称

    # 定义生成的归档文件名称
    FILE=archive_${DIR_NAME}_$DATE.tar.gz
    DEST=/root/$FILE
    
    • 1
    • 2
    • 3

    5.归档目录文件

    # 开始归档目录文件
    echo "开始归档..."
    echo
    tar -czf $DEST $DIR_PATH/$DIR_NAME
    
    if [ $? -eq 0 ]
    then
    echo "归档成功!"
    echo "归档文件为:$DEST"
    else
    echo "归档出现问题!"
    fi
    exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    完整代码如下

    #!/bin/bash
    
    #首先判断输入的参数个数是否为1个
    if [ $# != 1 ]
    then
            echo "参数个数不为1,应该只输入1个参数,是需要被归档文件的目录名"
    exit
    fi
    
    #从输入参数里获取目录名称
    if [ -d $1 ] #判断参数是否为文件夹
    then
            echo "参数是目录,符合要求"
    else
            echo "参数不是目录,不符合要求"
    exit
    fi
    
    DIRNAME=$(basename $1)
    DIR_PATH=$(cd $(dirname $1); pwd) #此处是为了取绝对路径
    
    # 获取当前日期
    DATE=$(date +%Y%m%d)
    
    # 定义生成的归档文件名称
    FILE=archive_${DIR_NAME}_$DATE.tar.gz
    DEST=/root/$FILE
    
    # 开始归档目录文件
    echo "开始归档..."
    echo
    tar -czf $DEST $DIR_PATH/$DIR_NAME
    
    if [ $? -eq 0 ]
    then
    echo "归档成功!"
    echo "归档文件为:$DEST"
    else
    echo "归档出现问题!"
    fi
    exit
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
  • 相关阅读:
    获取 Linux Standard Base (LSB) 版本信息
    C++并发与多线程笔记六:单例模式下的数据共享
    【JAVA基础之IO】字节流、字符流以及乱码问题
    巧妙利用表函数将MySQL数据导入到ClickHouse
    第13期 | GPTSecurity周报
    HanLP — 感知机(Perceptron)
    C++变量声明和变量定义
    若依分离版——配置多数据源(mysql和oracle),实现一个方法操作多个数据源
    C:sizeof运算符的一个陷阱
    java计算机毕业设计高校教学资源库设计与实现---MyBatis+系统+LW文档+源码+调试部署
  • 原文地址:https://blog.csdn.net/weixin_44999258/article/details/126444243