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

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

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

tail -f /var/logs/myLog*

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

5
задан 20 October 2014 в 13:14
5 ответов

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

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

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

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

ls /var/logs/myLog* | grep -v .gz$ | xargs tail -f
3
ответ дан 3 December 2019 в 01:04

В bash , если extendedglob задана опция (по умолчанию), вы можете отменить шаблон глобуса, заключив его в круглые скобки и добавив перед ним взрыв (! ). Например, ! (*. Gz) соответствует всем элементам, имена которых не заканчиваются на .gz . Дополнительную информацию см. В подразделе Расширение пути раздела РАСШИРЕНИЕ на странице руководства bash .

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

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

2
ответ дан 3 December 2019 в 01:04

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

ls /var/logs/myLog* | grep -v .gz$ | xargs tail -f
6
ответ дан 3 December 2019 в 01:04

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

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

или

tail -fn0 /var/log/*
0
ответ дан 3 December 2019 в 01:04

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

file /var/log/* | grep "ASCII text" | cut -d ":" -f 1 | xargs tail -f
1
ответ дан 3 December 2019 в 01:04

Теги

Похожие вопросы