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