Um comando como o Linux `tail` no PowerShell?

5

Como replicar o comportamento da cauda do Linux no PowerShell?

Estou executando um aplicativo que grava um arquivo de log ( error.log) e gostaria de ver as últimas linhas dele, além de manter as alterações de atualização do console.

Então, existe um equivalente a algo como tail -f filenameno PowerShell?

jsalonen
fonte
Veja também: stackoverflow.com/questions/4426442/… eGet-Content -Tail
Jay Bazuzi 8/12/12

Respostas:

7

No PowerShell 3, o cmdlet Get-Content(alias gc) suporta -Taile -Waitparâmetros quando usado em um sistema de arquivos. Procure com isso help gc.

PowerShill
fonte
12

O equivalente nativo do PS, já que o PSv3 é

Get-Content -Last n

o que também é rápido. No PSv2 e abaixo, você precisa se contentar com

Get-Content filename | Select -Last n

mas isso tem várias ressalvas. Ele não pode bloquear e aguardar novas alterações no arquivo, por exemplo, e também não é muito eficiente, pois precisa ler o arquivo desde o início completamente antes de poder mostrar as últimas linhas.

O PSCX possui um Get-FileTailcomando que possui um -Waitparâmetro:

Nome

Get-FileTail

Sinopse

Cmdlet PSCX: segue 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

Esse implante evita com eficiência as cotações de um arquivo, lendo as linhas do final, em vez de processar o arquivo inteiro. Esse comportamento é crucial para ajustar com eficiência arquivos grandes e grandes em uma rede. Você também pode especificar o Waitparâmetro para que o cmdlet aguarde e exiba o novo conteúdo conforme ele é gravado no arquivo. Use Ctrl+ Cpara interromper o ciclo 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 foi 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é aliasado tailpor padrão se você instalar o PSCX.

Joey
fonte
1
Instalou o PSCX 3.0 e tailfunciona exatamente como deveria agora. Isso é ótimo, obrigado!
Jsalonen
1
Pensei que vocês estavam falando sobre o PCSX, que é bem mais legal que o PSCX.
Snesticle
2
Hã? Por que falaríamos sobre um emulador de Playstation? E eu assumo o PowerShell sobre isso a qualquer dia, obrigado.
Joey #
Apenas uma atualização: instalei o PS 3.0 (sem o PSCX) e achei Get-Content... -last nextremamente eficiente em um arquivo de 1,7 GB . Consegui ler a cauda sem demora perceptível em uma máquina bastante lenta.
kmote
@kmote, sim, o PowerShell v3 possui esse recurso, mas no momento em que escrevi essa resposta eu ainda não usava o Windows 8 (e, portanto, o PS v3), acho.
Joey