Um equivalente do Windows ao comando tail do Unix [fechado]


410

Estou procurando o equivalente ao comando 'cauda' do Unix que me permitirá observar a saída de um arquivo de log enquanto ele está sendo gravado.


Isso ajuda? http://malektips.com/xp_dos_0001.html http://commandwindows.com/server2003tools.htm Aqui está o link direto da Microsoft. Eu testei na minha máquina (apenas por curiosidade e porque preciso dela) e funciona bem.
johnny

1
Na verdade, existe uma cauda para o XP. Só que a Microsoft não o instala com a versão padrão do XP; eles o empacotaram nas 'Ferramentas do Windows Server 2003 Resource Kit'. Você pode obtê-lo aqui: microsoft.com/downloads/…
Matt Poush

1
Não exaclty um ingênuo, mas veja aqui stackoverflow.com/questions/247234/...
Martin Beckett

MobaXterm, é gratuito e tem um registro de plugins, você pode fazer tail -f /drives/c/logs/mylog.log
surfealokesea

3
Eu não acho que isso deveria ter sido fechado, pois preciso da mesma coisa para depurar o rastreamento no meu aplicativo do Windows. Trata-se de "ferramentas de software comumente usados por programadores", que é sobre o tema
kristianp

Respostas:


137

Eu sugiro instalar algo como o GNU Utilities for Win32 . Tem a maioria dos favoritos, incluindo cauda.


5
Eu apenas tentei usar o GNU tailem um arquivo de 2 GB e ele engasgou. morefuncionou bem (pelo menos, vendo o início do arquivo).
Eric J.

@ EricJ., O mesmo para mim. Em um arquivo de 3 GB, posso fazer, headmas não tail... Idéias?
AlphaAa

@Alphaaa: Eu suspeito que tenha a ver com as chamadas do SO que o GNU Utilities usa. Veja stackoverflow.com/a/4003487/141172
Eric J.

@ EricJ., Obrigado, isso parece realmente relevante. Mas eu só percebi que é mais fácil para mim usar uma solução alternativa: Eu só vou escrever um script simples que faz uma tail:)
Alphaaa

1
Aqui eu acredito que é uma solução melhor: stackoverflow.com/questions/4426442/…
Dung

442

Se você usa o PowerShell, isso funciona:

Get-Content filenamehere -Wait -Tail 30

Postar o comentário de Stefan abaixo, para que as pessoas não percam

O PowerShell 3 apresenta um parâmetro -Tail para incluir apenas as últimas x linhas


13
Na verdade isso não é dinâmico
Jey Geethan

16
É bom saber sobre isso; obrigado. Mas tive alguns problemas com ele (no Windows 7). (1) exibe o arquivo inteiro (não é bom para um arquivo de log massivo, e é por isso que tailpode ser útil) (2) não é tão dinâmico quanto eu gostaria (talvez devido a alterações no sistema OS / arquivos entre minha configuração e outros pôsteres ?). Ou seja, eu determinei que o shell Get-Contentàs vezes não é atualizado até executar direm outro shell.
mpontillo

10
Acho que vale a pena mencionar que o PowerShell fará uma pausa na rolagem / saída se você selecionar algo dentro da janela do terminal para ter a chance de ler, copiar / colar, etc. Se você pressionar Enter, ele continuará a rolagem.
Cbednarski 19/05

19
PowerShell 3 introduz um parâmetro -tail para incluir apenas os últimos x linhas
Stefan Haberl

8
Portanto, a resposta correta para o Powershell não deveria ser algo assim Get-Content -Tail 100 -Wait .\logfile.log?
Henno Vermeulen 01/03

62

Eu sempre usei o Baretail para seguir no Windows. É grátis e muito bom.

Edit: para uma melhor descrição do Baretail veja esta pergunta


Essa acabou sendo a primeira solução que funcionou para mim no [gulp] Windows Server 2003 R2 SP1! Super fácil com o instalador, trabalhou para tailing Wasily direita fora da caixa :)
cellepo

Baixar e executar executáveis ​​não assinados por HTTP provavelmente não é uma boa ideia. No mínimo, deve-se fazer o download através do site HTTPS .
Zero3

Acho incrível que eles continuem mantendo o site e atualizando o certificado SSL até o momento, enquanto o software não é atualizado desde 2006. Mas funciona bem. Exatamente o que eu precisava. O Windows Defender não encontra nenhuma ameaça.
Lionet Chen


24

Qualquer pessoa interessada em um DOS CMD usa comandos em lote (veja abaixo).

Não é perfeito, e as linhas se repetem.

Uso: tail.bat -d tail.bat -f -f

@echo off
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
rem tail.bat -d <lines> <file>
rem tail.bat -f <file>

rem ****** MAIN ******
IF "%1"=="-d" GOTO displayfile
IF "%1"=="-f" GOTO followfile

GOTO end

rem ************
rem Show Last n lines of file
rem ************

:displayfile
SET skiplines=%2
SET sourcefile=%3

rem *** Get the current line count of file ***
FOR /F "usebackq tokens=3,3 delims= " %%l IN (`find /c /v "" %sourcefile%`) DO (call SET find_lc=%%l)

rem *** Calculate the lines to skip
SET /A skiplines=%find_lc%-!skiplines!

rem *** Display to screen line needed
more +%skiplines% %sourcefile%

GOTO end

rem ************
rem Show Last n lines of file & follow output
rem ************

:followfile
SET skiplines=0
SET findend_lc=0
SET sourcefile=%2

:followloop
rem *** Get the current line count of file ***
FOR /F "usebackq tokens=3,3 delims= " %%l IN (`find /c /v "" %sourcefile%`) DO (call SET find_lc=%%l)
FOR /F "usebackq tokens=3,3 delims= " %%l IN (`find /c /v "" %sourcefile%`) DO (call SET findend_lc=%%l)

rem *** Calculate the lines to skip
SET /A skiplines=%findend_lc%-%find_lc%
SET /A skiplines=%find_lc%-%skiplines%

rem *** Display to screen line when file updated
more +%skiplines% %sourcefile%

goto followloop

:end

Isso é inteligente, e eu pretendo usar a funcionalidade existente ao baixar uma ferramenta não é uma opção! No entanto, esse código consumirá CPU, pois girará continuamente no acompanhamento de -f.
Armstrhb

1
teve o mesmo problema com o download e comer CPU! adicionou esta linha ping 127.0.0.1 -n 2 > nulantes goto followloop. ele envia dois pings e espera 1 segundo entre eles. Então, deixaria a CPU viver!: D
Mohsen ZareZardeyni 4/17

Impressionante! Muito obrigado
John Fairbanks

1
por que empregar ping se você poderia utilizar timeout /t 2?
Namezero

23

Existem várias opções, no entanto, todas elas apresentam falhas com recursos mais avançados.

  • A cauda do GnuWin32 é de buggy ( α β γ ) - coisas como -f simplesmente não funcionam.

  • A cauda do UnxUtils parece melhor (-f funciona, mas --pid parece não funcionar, -n mas não --lines = n falha com -f), mas parece ser um projeto morto.

  • Cygwin é um grande e feio cogumelo, talvez apenas use o pacote DLL e coreutils - mas ainda tem problemas como - o pid não funciona com processos nativos do win32.


19

Eu usei Tail For Windows . Certamente não é tão elegante quanto usar

rabo
mas então você está usando o Windows. ;)


Eu segundo Tail para Windows. Gosto porque posso abrir e monitorar vários arquivos na mesma janela.
Paulo

o powershell gc -tail way não funciona se você estiver em um Posh 1 ou Posh 2.x. A funcionalidade gc -tail foi adicionada no Posh 3.0.
user1390375

16

Com o Windows PowerShell, você pode usar:

Get-Content <file> -Wait

15

Não vi o Log Expert em nenhum lugar entre as respostas aqui.

É personalizável e é muito bom para pesquisar arquivos de log. Até agora, é o melhor visualizador de log gráfico do Windows para mim.

Infelizmente, este software não está mais disponível. Você pode ler sobre isso em archive.org .


Eu amo os recursos do Log Expert, no entanto, minha experiência foi complicada no Windows 7 de 64 bits.
argila

Sinto falta da funcionalidade "visão clara".
Daniel Hári

13

Se você não deseja instalar nada, pode "criar seu próprio" arquivo em lotes que executa o trabalho a partir dos comandos padrão do Windows. Aqui estão algumas dicas de como fazê-lo.

1) Usando find / c / v "" yourinput.file , obtenha o número de linhas no seu arquivo de entrada. A saída é algo como:

---------- T.TXT: 15

2) Usando for / f , analise esta saída para obter o número 15.

3) Usando set / a , calcule o número de linhas principais que precisam ser puladas

4) Usando for / f "skip = n" pule as linhas da cabeça e faça eco / processe as linhas da cauda.

Se eu encontrar tempo, criarei um arquivo em lote e o postarei aqui.

EDITAR: tail.bat

REM tail.bat
REM
REM Usage: tail.bat <file> <number-of-lines> 
REM
REM Examples: tail.bat myfile.txt 10
REM           tail.bat "C:\My File\With\Spaces.txt" 10

@ECHO OFF
for /f "tokens=2-3 delims=:" %%f in ('find /c /v "" %1') do (
    for %%F in (%%f %%g) do set nbLines=%%F )
set /a nbSkippedLines=%nbLines%-%2
for /f "usebackq skip=%nbSkippedLines% delims=" %%d in (%1) do echo %%d

5
Aqui está o lote da explicação anterior. Ele exibe as últimas 10 linhas do arquivo atual: ____ para / f "tokens = 3" %% f in ('find / c / v ""% 0') define set nbLines = %% f ____ set / a nbSkippedLines = % nbLines% -10 ____ para / f "skip =% nbSkippedLines% delims =" %% d em (% 0) fazem eco %% d
Nicolas

1
É exatamente isso que o pôster deseja e funciona muito bem.
Jackie Yeh

Obrigado pelo código! Adicionei-o à resposta com o número de parâmetro corrigido e um adicional ao número de linhas. Observe que ele exibirá as linhas e uma saída. PS: Usei-o para criar um arquivo de 1.5Gb e obtive os resultados em apenas 15 segundos.
Leopoldo Sanczyk,

Na verdade, na etapa 4, seria ainda melhor eu usar o comando 'more', que usa parâmetros como o número de linhas a serem ignoradas. Ainda mais rápido, eu pensaria.
Philibert Perusse

8

Eu usei o Mtail recentemente e parece funcionar bem. Este é o tipo de GUI como o baretail mencionado acima. insira a descrição da imagem aqui



5

Experimente o Windows Services for UNIX . Fornece conchas, awk, sed, etc., bem como cauda.

Atualização -: infelizmente, a partir de 2019, esse sistema não estará mais disponível no Centro de Download da Microsoft.


1
Isso tem problemas no Win7 e mais recentes.
Doug Wilson

1
Mesmo? Você está dando uma resposta negativa às respostas de quatro anos de idade? Maneira de contribuir.
Dave

9
@ Dave: Embora a pergunta seja antiga, as pessoas ainda a procuram tentando encontrar a melhor resposta. Se uma resposta de quase 5 anos atrás não é mais relevante ou boa, então por que não se deve rebaixá-la? Todo este site trata de obter informações valiosas mais rapidamente - hoje, não há 5 anos.
Oliver

1
@ Hellfire - você deve editar a resposta com a condição de que não funcione com o Wwindows 7. É bobagem apenas comentar.
Preet Sangha


4

O DOS não possui comando de cauda; você pode baixar um binário do Windows para o GNU tail e outras ferramentas GNU aqui .



4

O DOS typefunciona como o * nux cat, embora apenas catdespeje o arquivo inteiro, então não é realmente verdade tail, mas estará disponível rapidamente sem fazer o download / instalar um tailsubstituto verdadeiro .


4

Acabei de escrever este pequeno script em lote. Não é tão sofisticado quanto o "rabo" do Unix, mas espero que alguém possa adicioná-lo para melhorá-lo, como limitar a saída às últimas 10 linhas do arquivo, etc. Se você melhorar este script, envie-o para mim em roubar ~ [at] ~ gmail.com.

@echo off

:: This is a batch script I wrote to mimic the 'tail' UNIX command.
:: It is far from perfect, but I am posting it in the hopes that it will
:: be improved by other people. This was designed to work on Windows 7.
:: I have not tested it on any other versions of Windows

if "%1" == "" goto noarg
if "%1" == "/?" goto help
if "%1" == "-?" goto help
if NOT EXIST %1 goto notfound
set taildelay=%2
if "%taildelay%"=="" set taildelay=1

:loop
cls
type %1

:: I use the CHOICE command to create a delay in batch.

CHOICE /C YN /D Y /N /T %taildelay%
goto loop

:: Error handlers

:noarg
echo No arguments given. Try /? for help.
goto die

:notfound
echo The file '%1' could not be found.
goto die

:: Help text

:help
echo TAIL filename [seconds]

:: I use the call more pipe as a way to insert blank lines since echo. doesnt
:: seem to work on Windows 7

call | more
echo Description:
echo     This is a Windows version of the UNIX 'tail' command.
echo     Written completely from scratch by Andrey G.
call | more
echo Parameters:
echo    filename             The name of the file to display
call | more
echo    [seconds]            The number of seconds to delay before reloading the
echo                         file and displaying it again. Default is set to 1
call | more
echo ú  /?                   Displays this help message
call | more
echo    NOTE:
echo    To exit while TAIL is running, press CTRL+C.
call | more
echo Example:
echo    TAIL foo 5
call | more
echo    Will display the contents of the file 'foo',
echo    refreshing every 5 seconds.
call | more

:: This is the end

:die

boa idéia usando o comando "type", mas você não pode canalizar para ele!
Eadmaster

Isso apenas recarrega o arquivo de texto.

a versão em lote do eco tem um comportamento estranho; se não houver argumentos, apenas sairá, mas se você chamar o comando como echo.com um ponto à direita na palavra (e não como um argumento separado), imprimirá uma única nova linha.
scragar




3

No Far Manager , pressione F3um arquivo para entrar no visualizador padrão, depois oEnd tecla para navegar até o final do arquivo.

Se o arquivo for atualizado, o Far Manager o rolará automaticamente.



0

Os visualizadores de log gráficos, embora possam ser muito bons para exibir arquivos de log, não atendem à necessidade de um utilitário de linha de comando que possa ser incorporado aos scripts (ou arquivos em lote). Geralmente, um comando simples e de uso geral pode ser usado como parte de uma solução especializada para um ambiente específico. Os métodos gráficos não se prestam prontamente a esse uso.



0

Acho que encontrei um utilitário que atende à necessidade da função de cauda em arquivos em lotes. É chamado "mtee", e é grátis. Eu o incorporei em um arquivo em lotes no qual estou trabalhando e faz o trabalho muito bem. Apenas certifique-se de colocar o executável em um diretório na instrução PATH e pronto.

Aqui está o link:

mtee

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.