【发布时间】: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 的动态目录路径,则需要不同的方法。