查找超过X天的文件,gzip,创建MD5并删除原始文件

时间:2015-08-10 04:36:27

标签: bash gzip md5

我正在制作一个小脚本,以帮助我根据此Question管理大量日志文件。

我添加了我需要的其他要求:

- 查找.log文件> 2天(这更适合安全预防措施)
- 创建日志文件的MD5哈希
- 删除原始日志文件

!/bin/bash
# 1) Find .log files > 2 days
# 2) Determine filename
# 3) gzip filename
# 4) Create gzip MD5
# 5) Remove original file 

function compress_file {
  BASENAME=`/bin/basename "$1"`;
  /bin/gzip -c "$1" > /var/logs/$BASENAME.gz;
  /usr/bin/md5sum  /var/logs/$BASENAME.gz >  /var/logs/$BASENAME.gz.md5
  /bin/rm /var/logs/$BASENAME
}

export -f compress_file;
/bin/find /var/logs -iname "*.log" -mtime +2 -exec /bin/bash -c 'compress_file "$0"' {} \;
export -fn compress_file;

由于这是一项关键操作,我想将一些输出编码到日志文件(甚至发送到syslog)以进行审计和故障排除。

UPDATE:另外还要记录到记录器,如果由于$ BASENAME仅处理文件名而没有考虑到文件名,那么如何按年/月/日存储日志文件?动态目录。

/var/log//2015/08/10/data1.log
/var/log//2015/08/10/data2.log
/var/log//2015/08/10/data3.log
/var/log//2015/08/11/data1.log
/var/log//2015/08/11/data2.log
/var/log//2015/08/11/data3.log

1 个答案:

答案 0 :(得分:0)

您可以使用 logger 命令将消息写入syslog。只需在任何操作之前写入日志消息。像:

Logger "Remove $BASENAME"
/bin/rm /var/logs/$BASENAME

您还可以验证关键命令的结果。只需检查" $?"执行任何命令后的变量。它包含执行结果。