如何对当前目录中除一个之外的所有日志文件运行“tail -f”?

如何对当前目录中除一个之外的所有日志文件运行“tail -f”?

作为我日常开发任务的一部分(在运行 OS 10.12.3 的 Mac 上),我tail -f *从终端运行我的日志文件夹。该文件夹包含大约 15 个不同的文件。我如何修改此命令来监控除一个文件外的所有文件*假设我想要排除的唯一文件*名为Repetitive.log

抱歉,这个问题太基础了,我找了好久,没找到重复的。转自https://stackoverflow.com/questions/42815599/exclude-files-from-the-catchall-symbol

答案1

如果你正在使用bash作为你的 shell,请将环境变量设置GLOBIGNORE为你想要的以冒号分隔的模式列表不是当 shell 正在匹配时,例如

$ export GLOBIGNORE=Repetitive.log
$ export GLOBIGNORE=somefile:anotherfile:abc*

man bash

   GLOBIGNORE
          A colon-separated list of  patterns  defining  the  set  of
          filenames  to be ignored by pathname expansion.  If a file-
          name matched by a pathname expansion pattern  also  matches
          one  of  the patterns in GLOBIGNORE, it is removed from the
          list of matches.

答案2

xargs是你的朋友!如果没有,find也可以帮忙。

这里有四种方法,使用xargsfind ... -exec扩展模式匹配:

使用xargs通过lsgrep

ls | grep -v Repetitive.log | xargs tail -f

使用xargs方式find

find . -maxdepth 1 ! -name Repetitive.log | xargs tail -f

find-exec参数一起使用

find . -maxdepth 1 ! -name Repetitive.log -exec tail -f {} \;

使用扩展模式匹配bash

很好的答案,摘自https://stackoverflow.com/a/19429723/1862762

shopt -s extglob
tail -f /directory/of/logfiles/!(Repetitive.log)

笔记

对于这个任务,我更喜欢这种xargs方式,因为它提供了带有tail相应文件名标记的输出。使用lsgrep似乎更直观,也更容易记住。

相关内容