我正在尝试找到正确的命令来跟踪一堆日志文件,同时排除设置目录中的压缩文件。日志文件变得过大,因此正在压缩。
目前我正在使用:
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
中的子部分。EXPANSION
bash
在 中zsh
,如果extglob
设置了该选项(它是不是(默认情况下),您可以通过在 glob 模式前面添加插入符号 ( ^
) 来否定该模式。例如,^*.gz
匹配名称不以 结尾的所有项目.gz
。有关更多信息,请参阅手册页FILENAME GENERATION
中的 部分。zshexpn
请注意,一般来说,如果你想使用ls
glob 模式,你应该指定-d
。这是因为 shell 会将 glob 模式扩展为匹配名称的列表,并将每个名称ls
作为单独的参数传递给 。如果你不使用-d
,ls
将列出内容任何指定名称的目录。
答案4
您可以使用以下行:
file /var/log/* | grep "ASCII text" | cut -d ":" -f 1 | xargs tail -f