我试图find正确的命令尾巴一堆日志文件,同时排除在设置目录中的压缩文件。 日志文件被压缩,因为它们变得过大。
目前我正在使用:
tail -f /var/logs/myLog*
哪个工作正常,但它也将尾巴。乱七八糟的.gz文件。 我只需要在没有这个扩展名的情况下只尾部分
如果文件名有其他的共同点 – 例如名字的长度,名字的数量,名字的结尾……你可以简单地调整你的glob。
如果没有,还有其他一些方法:
tail -f `ls -l /var/logs/myLog* |grep -v .gz$`
或者,使用xargs:
ls /var/logs/myLog* | grep -v .gz$ | xargs tail -f
通常tail -f /var/logs/myLog*log将起作用。 但是,如果文件名的末尾是不可预知的,而且唯一的办法就是排除以.gz结尾的文件,这样就变得更加复杂了。 一种可能性是:
ls /var/logs/myLog* | grep -v .gz$ | xargs tail -f
在bash ,如果extendedglob选项被设置(默认情况下),你可以通过将它包含在圆括号中并且预置一个bang( ! )来否定一个glob模式。 例如, !(*.gz)匹配名称不以.gz结尾的所有项目。 有关更多信息,请参阅bash手册页面的EXPANSION部分中的Pathname Expansion部分。
在zsh ,如果设置了extglob选项(默认情况下不是这样 ),则可以通过预先设置插入符号( ^ )来否定glob模式。 例如, ^*.gz .gz匹配所有名称不以.gz结尾的项目。 有关更多信息,请参见zshexpn手册页中的FILENAME GENERATION部分。
请注意,一般来说,如果要使用带有glob模式的ls ,则应指定-d 。 这是因为shell将glob模式扩展为匹配名称列表,并将每个ls作为单独的parameter passing给ls 。 如果你不使用-d , ls会列出所有给定名称的目录的内容 。
你也可以使用-n选项来指定你不想要“旧”的:
tail -f -n 0 /var/log/*
要么
tail -fn0 /var/log/*