
Как можно воспроизвести поведение tail Linux в PowerShell?
Я запускаю приложение, которое записывает файл журнала ( error.log
), и мне хотелось бы видеть последние строки из него, а также сохранять обновления консоли.
Так есть ли эквивалент чего-то подобного tail -f filename
в PowerShell?
решение1
Начиная с PowerShell 3 командлет Get-Content
(alias gc
) поддерживает параметры -Tail
и -Wait
при использовании в файловой системе. Найдите его с помощью help gc
.
решение2
Собственный эквивалент PS, поскольку PSv3 — это
Get-Content -Last n
что также быстро. В PSv2 и ниже вам придется довольствоваться
Get-Content filename | Select -Last n
но это имеет несколько оговорок. Он не может блокировать и ждать новых изменений в файле, например, и также не очень эффективен, поскольку ему приходится полностью читать файл с самого начала, прежде чем он сможет показать последние строки.
PSCXесть Get-FileTail
команда, которая имеет -Wait
параметр:
Имя
Get-FileTail
Синопсис
Командлет PSCX: отслеживает содержимое файла — при необходимости ожидая нового содержимого.
Синтаксис
Get-FileTail [-Path] <String[]> [-Count <Int32>] [-Encoding <EncodingParameter>] [-LineTerminator <String>] [-Wait] [<CommonParameters>] Get-FileTail [-LiteralPath] <String[]> [-Count <Int32>] [-Encoding <EncodingParameter>] [-LineTerminator <String>] [-Wait] [<CommonParameters>]
Описание
Эта реализация эффективно отслеживает содержимое файла, считывая строки с конца, а не обрабатывая весь файл. Такое поведение имеет решающее значение для эффективного отслеживания больших файлов журналов и больших файлов журналов по сети. Вы также можете указать параметр,
Wait
чтобы командлет ждал и отображал новое содержимое по мере его записи в файл. Используйте Ctrl+, Cчтобы выйти из цикла ожидания. Обратите внимание, что если кодировка не указана, командлет попытается автоматически определить кодировку, прочитав первый символ из файла. Если в файл еще не записан ни один символ, командлет по умолчанию будет использовать кодировку Unicode. Вы можете переопределить это поведение, явно указав кодировку с помощью параметра Encoding.
Get-FileTail
tail
по умолчанию присваивается псевдоним, если вы устанавливаете PSCX.