Назад | Перейти на главную страницу

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

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

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

tail -f /var/logs/myLog*

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

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

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

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

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

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

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

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 перечислит содержание любых каталогов, чьи имена даны.

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

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

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

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

или

tail -fn0 /var/log/*