首页 > 解决方案 > Solaris 中的日志轮换(压缩/删除)脚本

问题描述

在 linux 环境中具有相同的日志轮换文件并且它们在那里工作。在 Solaris 中,我在运行这些脚本时遇到问题:

脚本的主要目的是删除所有超过 30 天的日志并压缩所有超过 5 天的日志。-not -name使用它是因为我只想对旋转的日志文件进行操作,例如something.log.20181102因为 .log 文件是当前文件并且我不想触摸它们。

#!/bin/bash

find ./logs -mindepth 1 -mtime +30 -type f -not -name "*.log" -delete
find ./logs -mtime +5 -not -name "*.log" -exec gzip {} \;

出现问题是因为它-mindepth给出-not了错误:

find: bad option -not
find: [-H | -L] path-list predicate-list

基于搜索,我必须以-prune某种方式在查找中使用,但我不太确定如何使用。

标签: bashunixsolaris

解决方案


如果您查看find(1)Linux(或gfind(1)Solaris)上的手册页,您会看到

-not expr
    Same as ! expr, but not POSIX compliant.

因此,您应该能够替换-not!,尽管您需要使用反斜杠或引号将其从 shell 中转义:

find ... \! -name "*.log" ...

请注意,在 Solaris 上,有一个名为的命令logadm旨在帮助您处理此类事情,并且可能值得研究,除非您希望在 Solaris 和 Linux 上具有完全相同的行为。


推荐阅读