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.
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.
Respostas:
Eu sugiro instalar algo como o GNU Utilities for Win32 . Tem a maioria dos favoritos, incluindo cauda.
tail
em um arquivo de 2 GB e ele engasgou. more
funcionou bem (pelo menos, vendo o início do arquivo).
head
mas não tail
... Idéias?
tail
:)
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
tail
pode 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 dir
em outro shell.
Get-Content -Tail 100 -Wait .\logfile.log
?
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
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
ping 127.0.0.1 -n 2 > nul
antes goto followloop
. ele envia dois pings e espera 1 segundo entre eles. Então, deixaria a CPU viver!: D
timeout /t 2
?
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.
Eu usei Tail For Windows . Certamente não é tão elegante quanto usar
rabomas então você está usando o Windows. ;)
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 .
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.
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
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.
Eu prefiro o TailMe devido à possibilidade de assistir vários arquivos de log simultaneamente em uma janela: http://www.dschensky.de/Software/Staff/tailme_en.htm
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 .
Outra opção seria instalar o MSYS (que é mais leve que o Cygwin).
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
echo.
com um ponto à direita na palavra (e não como um argumento separado), imprimirá uma única nova linha.
O tail
comando e muitos outros estão disponíveis no pacote Windows Resource Kit Tools .
Se você deseja usar as portas Win32 de alguns utilitários Unix (em vez de instalar o Cygwin), eu recomendo os utilitários GNU para Win32 .
Peso mais leve que o Cygwin e mais portátil.
Instale o MKS Toolkit ... Para que você possa executar todos os comandos Unix no Windows.
O comando é:
tail -f <file-name>
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.
Estou usando o Kiwi Log Viewer . É grátis.
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.
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: