Um comando como o Linux 'cauda' no PowerShell?

5

Como posso 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, bem como manter as alterações de atualização do console.

Então, há um equivalente a algo como tail -f filename no PowerShell?

    
por jsalonen 08.11.2012 / 12:27

2 respostas

7

A partir do PowerShell 3, o cmdlet Get-Content (alias gc ) suporta os parâmetros -Tail e -Wait quando usado em um sistema de arquivos. Procure com help gc .

    
por 11.01.2013 / 16:13
12

O equivalente PS nativo desde PSv3 é

Get-Content -Last n

que também é rápido. Na 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 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.

PSCX tem um comando Get-FileTail que tem um parâmetro -Wait :

Name

Get-FileTail

Synopsis

PSCX Cmdlet: Tails the contents of a file - optionally waiting on new content.

Syntax

Get-FileTail [-Path] <String[]> [-Count <Int32>] [-Encoding <EncodingParameter>] [-LineTerminator <String>]
[-Wait] [<CommonParameters>]

Get-FileTail [-LiteralPath] <String[]> [-Count <Int32>] [-Encoding <EncodingParameter>] [-LineTerminator <String>]
[-Wait] [<CommonParameters>]

Description

This implentation efficiently tails the cotents of a file by reading lines from the end rather then processing the entire file. This behavior is crucial for efficiently tailing large log files and large log files over a network. You can also specify the Wait parameter to have the cmdlet wait and display new content as it is written to the file. Use Ctrl+C to break out of the wait loop. Note that if an encoding is not specified, the cmdlet will attempt to auto-detect the encoding by reading the first character from the file. If no character haven't been written to the file yet, the cmdlet will default to using Unicode encoding. You can override this behavior by explicitly specifying the encoding via the Encoding parameter.

Get-FileTail é com alias para tail por padrão se você instalar o PSCX.

    
por 08.11.2012 / 12:30