![如何对当前目录中除一个之外的所有日志文件运行“tail -f”?](https://linux22.com/image/1525462/%E5%A6%82%E4%BD%95%E5%AF%B9%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%AD%E9%99%A4%E4%B8%80%E4%B8%AA%E4%B9%8B%E5%A4%96%E7%9A%84%E6%89%80%E6%9C%89%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E8%BF%90%E8%A1%8C%E2%80%9Ctail%20-f%E2%80%9D%EF%BC%9F.png)
作为我日常开发任务的一部分(在运行 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
也可以帮忙。
这里有四种方法,使用xargs
或find ... -exec
扩展模式匹配:
使用xargs
通过ls
和grep
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
相应文件名标记的输出。使用ls
和grep
似乎更直观,也更容易记住。