Я пытаюсь найти правильную команду, чтобы отслеживать кучу файлов журнала, исключая заархивированные файлы в заданном каталоге. Файлы журнала архивируются по мере увеличения их размера.
На данный момент я использую:
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/*