Я пытаюсь найти, что правильная команда выслеживает набор файлов журнала пока, исключая заархивированные файлы в каталоге набора. Файлы журнала заархивированы, поскольку они становятся увеличенного размера.
В данный момент я использую:
tail -f /var/logs/myLog*
Который хорошо работает, но это также выследит .gz файлы, которые являются искаженной путаницей. Я должен выследить только файлы без этого расширения.
Если в именах файлов есть что-то общее - например, длина имени, количество точек в имени, окончание имени ... вы можете просто настроить глобус.
Если нет, есть другие способы:
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
. Дополнительную информацию см. В подразделе Расширение пути
раздела РАСШИРЕНИЕ
на странице руководства bash
.
В zsh
, если Параметр extglob
установлен (по умолчанию это , а не ), вы можете отменить шаблон глобуса, добавив перед ним курсор ( ^
). Например, ^ *. Gz
соответствует всем элементам, имена которых не заканчиваются на .gz
. Дополнительную информацию см. В разделе FILENAME GENERATION
на странице руководства zshexpn
.
Обратите внимание, что в целом, если вы хотите использовать ls
с шаблоном глобуса , вы должны указать -d
. Это связано с тем, что оболочка расширяет шаблон glob в список совпадающих имен, передавая каждое из них ls
в качестве отдельного аргумента. Если вы не используете -d
, ls
перечислит содержимое всех каталогов, чьи имена даны.
Обычно работает tail -f / var / logs / myLog * log
. Однако, если конец имен файлов непредсказуем, и на самом деле единственный способ - исключить файлы, заканчивающиеся на .gz
, это усложняется. Возможен следующий вариант:
ls /var/logs/myLog* | grep -v .gz$ | xargs tail -f
Вы также можете использовать параметр -n
, чтобы указать, что вам не нужны «старые»:
tail -f -n 0 /var/log/*
или
tail -fn0 /var/log/*
Вы можете использовать следующую строку:
file /var/log/* | grep "ASCII text" | cut -d ":" -f 1 | xargs tail -f