根据配置文件按小时归档压缩文件

2021-07-09  本文已影响0人  刘小白DOER

    本脚本现实中使用的意义在于可以根据配置文件来定时打包文件,然后再配合cron定时执行脚本以及定时删除过期文件,可以达到按时备份数据的功能。

    本脚本根据shell脚本编程大全修改,最终托管在shells/Hourly_Archive.sh at main · laufei90/shells (github.com) 。请上github上查看,在此就不贴代码了。

    整个脚本分为部分。

    一、判断配置文件是否存在,不存在则推出;

    二、循环读取配置文件,如果配置文件中文件存在则添加到FILE_LIST ;

    读取配置文件里面的条目数据有三种方法。笔者使用第二种方法。

    1、cat命令输出到for循环,比如:

    for hostname in  `cat /home/lighthouse/shell/HOSTid`

    2、exec重定向标准输入STDIN,比如从基本脚本中提取的一部分代码。

    exec < $CONFIG_FILE 

    read FILE_NAME     

    while [ $? -eq 0 ]

    3、cat命令通过管道符传递到while循环。

    cat filename | while read line

      第3个示例中 cat filename | while read line,因为管道会开启子shell,使得while中的命令都在子shell中执行,数据会丢失。而且第一和第三的cat 会一次性将文件所有数据装入内存,如果文件足够大,会直接占用巨量内存。而第二个示例使用输入重定向的方式则每次只占用一行数据的内存,而且是在当前shell环境下执行的,while内的变量赋值、数组赋值在退出while后仍然有效。

    三、tar -czf打包压缩FILE_LIST文件 。

    在测试时,笔者遇到的一个问题就是再配置文件中写了注释信息,  read 命令将读取注释信息作为文件名来判断是否存在,这个是不合理的。使用cat命令读取配置文件时,可以使用管道符|传递给grep或者 sed来处理。

  sed  '/^#/d'  或者 grep -v ^#  。

    但是使用重定向标准输入的时候,笔者没有找到read指令跳过#开头的哪一行,可能只能通过循环内部if来判断了。或者注意在配置文件内部不能直接写注释信息。

测试结果如下:

上一篇 下一篇

猜你喜欢

热点阅读