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