Хвост все файлы журнала в каталоге | исключить заархивированные файлы

Я пытаюсь найти правильную команду для хвоста кучу файлов журналов, исключая заархивированные файлы в установленном каталоге. Файлы журналов архивируются по мере их увеличения.

На данный момент я использую:

tail -f /var/logs/myLog*

Который работает нормально, но он также подгоняет файлы.gz, которые являются искаженным беспорядком. Мне нужно только хвост файлы без этого расширения.

5 ответов

Обычно tail -f /var/logs/myLog*log будет работать. Однако, если конец имен файлов непредсказуем, и на самом деле единственный способ - исключить файлы, заканчивающиеся на .gzстановится все сложнее. Одна из возможностей заключается в следующем:

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

В bash если extendedglob опция установлена ​​(по умолчанию), вы можете отменить шаблон глобуса, заключив его в скобки и добавив удар (!). Например, !(*.gz) соответствует всем элементам, чьи имена не заканчиваются .gz, Увидеть Pathname Expansion подраздел в EXPANSION раздел в bash Страница справочника для получения дополнительной информации.

В zsh если extglob опция установлена ​​(по умолчанию это не так), вы можете отменить шаблон глобуса, добавив каретку (^). Например, ^*.gz соответствует всем элементам, чьи имена не заканчиваются .gz, Увидеть FILENAME GENERATION раздел в zshexpn Страница справочника для получения дополнительной информации.

Обратите внимание, что в целом, если вы хотите использовать ls с шаблоном глобуса, вы должны указать -d, Это связано с тем, что оболочка расширяет шаблон глобуса в список совпадающих имен, передавая каждое из них ls в качестве отдельного аргумента. Если вы не используете -d, ls будет перечислять содержимое любых каталогов, чьи имена это дано.

Если в именах файлов есть что-то общее - например, длина имени, количество периодов в имени, окончание имени... вы можете просто настроить свой глобус.

Если нет, есть несколько других способов:

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

или, используя xargs:

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

Вы можете использовать следующую строку:

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

Вы также можете использовать -n возможность указать, что вы не хотите "старые":

tail -f -n 0 /var/log/*

или же

tail -fn0 /var/log/*
Другие вопросы по тегам