
Como posso replicar o comportamento da cauda do Linux no PowerShell?
Estou executando uma aplicação que grava um arquivo de log ( error.log
) e gostaria de ver as últimas linhas dele, bem como manter o console atualizando as alterações.
Então, existe um equivalente a algo como tail -f filename
no PowerShell?
Responder1
A partir do PowerShell 3, o cmdlet Get-Content
(alias gc
) oferece suporte -Tail
e -Wait
parâmetros quando usado em um sistema de arquivos. Procure com help gc
.
Responder2
O equivalente PS nativo já que PSv3 é
Get-Content -Last n
o que também é rápido. No PSv2 e abaixo você tem que se contentar com
Get-Content filename | Select -Last n
mas isso tem várias ressalvas. Ele não pode bloquear e esperar por novas alterações no arquivo, por exemplo, e também não é muito eficiente, pois precisa ler o arquivo completamente desde o início antes de poder mostrar as últimas linhas.
PSCXtem um Get-FileTail
comando que tem um -Wait
parâmetro:
Nome
Get-FileTail
Sinopse
Cmdlet PSCX: acompanha o conteúdo de um arquivo - opcionalmente aguardando novo conteúdo.
Sintaxe
Get-FileTail [-Path] <String[]> [-Count <Int32>] [-Encoding <EncodingParameter>] [-LineTerminator <String>] [-Wait] [<CommonParameters>] Get-FileTail [-LiteralPath] <String[]> [-Count <Int32>] [-Encoding <EncodingParameter>] [-LineTerminator <String>] [-Wait] [<CommonParameters>]
Descrição
Essa implementação segue com eficiência os conteúdos de um arquivo, lendo as linhas do final, em vez de processar o arquivo inteiro. Esse comportamento é crucial para rastrear com eficiência arquivos de log grandes e arquivos de log grandes em uma rede. Você também pode especificar o
Wait
parâmetro para que o cmdlet aguarde e exiba o novo conteúdo à medida que ele é gravado no arquivo. Use Ctrl+ Cpara sair do loop de espera. Observe que se uma codificação não for especificada, o cmdlet tentará detectar automaticamente a codificação lendo o primeiro caractere do arquivo. Se nenhum caractere ainda não tiver sido gravado no arquivo, o cmdlet usará como padrão a codificação Unicode. Você pode substituir esse comportamento especificando explicitamente a codificação por meio do parâmetro Encoding.
Get-FileTail
recebe o alias tail
por padrão se você instalar o PSCX.