【问题标题】:Find Files Older than X Days, gzip, create MD5 and remove original查找早于 X 天的文件、gzip、创建 MD5 并删除原始文件
【发布时间】:2015-08-10 04:36:26
【问题描述】:

我正在编写一个小脚本来帮助我管理基于此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)中,以进行审计和故障排除。

更新:除了记录到记录器之外,如果按年/月/日存储的位置,我该如何处理日志文件,因为 $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

【问题讨论】:

  • 您可以尝试获取空文件夹列表并删除它们。喜欢:find / -type d -empty
  • 我猜上述解决方案适用于静态目录路径,如果使用包含 YYYY/MM/DDD 的动态目录路径,则需要不同的方法。

标签: bash gzip md5


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 2017-07-28
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多