`
stride
  • 浏览: 59741 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

用shell压缩三个月及之前的文件(文件名含日期)

阅读更多

在log目录下有如下文件:

 

特征很明显:中间有8位连续数字表示年月日

比如现在是2011年5月份,压缩3个月及之前的就是XXXXXXX.201102XX.log的文件

程序思路:

先用date命令加参数得出今天之前三个月的年月,比如今天是2011年5月19号,用下面这句得到201102:

date -d "3 months ago" +%Y%m

 然后用ls命令将log目录下的文件名列出来赋给数组,在循环中用正则匹配出文件名中的日期:

.*\([0-9]\{8\}\).*
 这条正则的相关文档:expr正则匹配心得1

对文件名列表数组循环,在循环中检查到匹配的则给文件名左边添加“log/”,不匹配则置为空串,注意是空串不是

然后检查最终数组是否有可用元素,如果没有则打印提示信息,有则执行tar命令;

最后删除已使用过的文件

 

echo "Please wait..."
m=`date -d "3 months ago" +%Y%m`
index=0
f=`ls log -1 -c`
for name in $f
do
    n=`expr "$name" : '.*\([0-9]\{8\}\).*'`
    if [ "$n" != "" ] && [ "$n" -le "$m"31 ] 
    then
        f[$index]="log/$name"
    else
        f[$index]=""
    fi
    (( index ++ ))
done

str=${f[@]}
if [ "${#str}" -gt 0 ]
then
    tar -zcvf logbak/$m.tar.gz  $str
else
    echo "No files found."
    exit 0
fi

echo "tar.gz maked, now delete old files."

rm -fr $str

echo "done."
exit 0
 

 

0
0
分享到:
评论

相关推荐

    Shell_经典实例

    该脚本用于计算上个月最后一天的日期,格式为`YYYYMMDD`。 1. **获取当前年月**:使用`date +%Y`和`date +%m-1|bc`分别获取当前年份和上一个月的月份。 2. **调整月份和年份**:如果月份小于1,则将月份设为12,并...

    实验三 嵌入式 linux-shell程序设计实验

    输入一个文件名,如果文件名为空则提示输入的文件为空,否则判断文件是否存在,不存在则显示提示信息,如果文件存在则判断文件是普通文件还是目录,或是其他文件,给出相应的判断信息 实验小结: 通过上述实例,...

    习题07-Shell编程.docx

    - `$BACKETC`: 存储了压缩文件的名称,由当前日期(年、月、日)和 "etc" 组成。 2. **特殊字符的解释**: - 引号:双引号内的特殊字符会被解释,而单引号内的不会。 - `$`: 用于引用变量的值。 - `#`: 表示...

    Linux常用Shell脚本珍藏

    例如,每个月的第一天备份并压缩 `/etc` 目录的所有内容,并保存到 `/root/bak` 目录。 ##### 脚本示例 ```bash #!/bin/sh DIRNAME=$(ls /root | grep bak) if [ -z "$DIRNAME" ]; then mkdir /root/bak cd /root...

    shell_command.txt

    - 创建压缩包:`tar -cvf [压缩文件名] [待压缩文件/目录]` - 示例:`tar -cvf archive.tar.gz dir1`(创建名为archive.tar.gz的压缩包,其中包含dir1目录的内容)。 - 解压缩:`tar -zxvf [压缩文件名]` - ...

    数据库备份策略.pdf

    在文件路径和名称的设置上,脚本中也展示了如何动态生成文件路径和文件名,这里通过系统日期和时间来命名文件,如将月、日、小时和分钟组合进文件名,以确保每次备份的文件名具有唯一性。 文档还提到了使用xp_cmd...

    [MS-SHLLINK]Shell Link(.LNK) Binary File Format

    [MS-SHLLINK] Shell Link (.LNK) 二进制文件格式是微软公司发布的一项技术规范文档,该文档详细介绍了Windows操作系统中使用的快捷方式文件(.LNK文件)的具体结构与组成。.LNK文件是一种用于创建到其他文件或目录的...

    《Python Cookbook》第三版繁體中文

    3.13 计算最后一个周五的日期:编写函数计算特定日期之前或之后的某一周的工作日。 3.14 计算当前月份的日期范围:生成本月所有的日期。 3.15 字符串转换为日期:使用dateutil或datetime模块将字符串转换为日期对象...

    网管教程 从入门到精通软件篇.txt

     注意:使用 bootcfg /rebuild 之前,应先通过 bootcfg /copy 命令备份 boot.ini 文件。  bootcfg /scan 扫描用于 Windows 安装的所有磁盘并显示结果。  注意:这些结果被静态存储,并用于本次会话。如果在...

    linux下的几个常用操作

    - **cal**:显示日历,`-3`显示前一个月、本月和下个月,`-y`显示整年日历。 - **date**:显示或设置系统时间,`+formatstring`用于定制时间格式输出。 以上知识涵盖了Linux环境下从基本操作到高级管理的多个层面,...

    Linux期末复习简答.pdf

    接着,脚本会获取当前的年、月、日,构造一个新的备份文件名,并使用tar命令将/etc目录压缩到该备份文件中。 以上知识点涵盖了Linux中断处理机制、信号处理、文件系统结构、内核线程动态管理以及系统管理命令和脚本...

    JAVA上百实例源码以及开源项目源代码

    Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码,文件操作,压缩包查看 Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码...

    Linux常用命令

    这个命令非常实用,例如`touch abc`创建一个名为abc的空文件,`touch -t *** aaa`将名为aaa的文件时间戳修改为2009年5月1日10点。 Linux系统下的文件权限使用`rwx`表示,分别代表读(read)、写(write)、执行...

    ubuntu入门到精通pdf

    通常,每隔六个月会有一个新版本发布,而长期支持(LTS)版本每两年发布一次。 - **特点:** Ubuntu以易用性和广泛的社区支持著称。它拥有丰富的软件库,并且对新手友好。此外,Ubuntu还非常注重安全性,定期发布...

    Linux 考试

    5. 网络管理通常包括监测、传输和管理三个部分,管理部分是核心。 6. 系统管理员的职责涉及系统资源管理、性能管理、设备管理、安全管理以及记账管理。 7. Linus Torvalds是Linux的创始人,他是芬兰国籍,1991年10月...

Global site tag (gtag.js) - Google Analytics