跟踪目录中的所有日志文件|排除压缩文件

跟踪目录中的所有日志文件|排除压缩文件

我正在尝试找到正确的命令来跟踪一堆日志文件,同时排除设置目录中的压缩文件。日志文件变得过大,因此正在压缩。

目前我正在使用:

tail -f /var/logs/myLog*

效果很好,但它也会对乱码的 .gz 文件进行 tail 处理。我只需要 tail 没有此扩展名的文件即可。

答案1

如果文件名有其他共同点 - 例如名称的长度、名称中的句点数、名称的结尾...您可以简单地调整您的 glob。

如果没有的话,还有其他一些方法:

tail -f `ls -l /var/logs/myLog* |grep -v .gz$`

或者,使用 xargs:

ls /var/logs/myLog* | grep -v .gz$ | xargs tail -f

答案2

通常tail -f /var/logs/myLog*log可以。但是,如果文件名的结尾不可预测,而实际上唯一的方法是排除以 结尾的文件.gz,那么情况就会变得更加复杂。一种可能性是:

ls /var/logs/myLog* | grep -v .gz$ | xargs tail -f

答案3

在 中bash,如果extendedglob设置了选项(默认情况下),您可以通过将 glob 模式括在括号中并在前面添加感叹号 ( !) 来否定该模式。例如,!(*.gz)匹配名称不以 结尾的所有项目.gz。有关更多信息,请参阅手册页中部分Pathname Expansion中的子部分。EXPANSIONbash

在 中zsh,如果extglob设置了该选项(它是不是(默认情况下),您可以通过在 glob 模式前面添加插入符号 ( ^) 来否定该模式。例如,^*.gz匹配名称不以 结尾的所有项目.gz。有关更多信息,请参阅手册页FILENAME GENERATION中的 部分。zshexpn

请注意,一般来说,如果你想使用lsglob 模式,你应该指定-d。这是因为 shell 会将 glob 模式扩展为匹配名称的列表,并将每个名称ls作为单独的参数传递给 。如果你不使用-dls将列出内容任何指定名称的目录。

答案4

您可以使用以下行:

file /var/log/* | grep "ASCII text" | cut -d ":" -f 1 | xargs tail -f

相关内容