Я шукаю еквівалент команди "хвіст" Unix, яка дозволить мені спостерігати вихід файлу журналу під час його запису.
Я шукаю еквівалент команди "хвіст" Unix, яка дозволить мені спостерігати вихід файлу журналу під час його запису.
Відповіді:
Я б запропонував встановити щось на зразок GNU Utilities для Win32 . У нього більшість фаворитів, в тому числі хвіст.
tail
на 2 ГБ файл, і він захлинувся. more
добре працював (принаймні, перегляд початку файлу).
head
але не tail
... Ідеї?
tail
:)
Якщо ви використовуєте PowerShell, це працює:
Get-Content filenamehere -Wait -Tail 30
Публікуємо коментар Стефана знизу, тому люди цього не пропускають
PowerShell 3 вводить параметр -Tail для включення лише останніх x рядків
tail
може бути корисним) (2) це не так динамічно, як хотілося б (можливо, через зміни ОС / файлової системи між моєю установкою та іншими плакатами ?). Тобто я визначив, що Get-Content
інколи оболонка іноді не оновлюється, поки я не запущу dir
іншу оболонку.
Get-Content -Tail 100 -Wait .\logfile.log
?
Я завжди використовував Baretail для хвостів у Windows. Це безкоштовно і досить приємно.
Редагувати: для кращого опису Baretail див. Це питання
Усі, хто цікавиться хвостом DOS CMD, використовуючи пакетні команди (див. Нижче).
Це не префект, і рядки колись повторюються.
Використання: 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
раніше goto followloop
. він надсилає два пінгви і чекає 1 сек між ними. так що це дозволить процесору жити!: D
timeout /t 2
?
Варіантів існує досить багато, проте всі вони мають вади з більш досконалими функціями.
Хвіст GnuWin32 баггі ( α β γ ) - такі речі, як -f просто не працюють.
Хвіст UnxUtils здається кращим (-f працює, але - швидше здається, -n, але не --lines = n не вдається з -f), але здається, це мертвий проект.
Cygwin - це велика потворна каша, вона, можливо, може просто використовувати пакет DLL та coreutils - але все ще є такі проблеми, як --pid не працює з нативними процесами win32.
Я використовував Tail для Windows . Звичайно, не настільки елегантно, як у використанні
хвістале тоді ви використовуєте Windows. ;)
Я тут не бачив експертів журналу серед відповідей.
Це налаштовується і дуже добре для обходу файлів журналів. Поки що це найкращий переглядач графічного журналу Windows для мене.
На жаль, це програмне забезпечення більше не доступне. Про це можна прочитати на archive.org .
Якщо ви нічого не хочете встановлювати, ви можете "створити свій" пакетний файл, який виконує завдання зі стандартних команд Windows. Ось деякі вказівки щодо того, як це зробити.
1) Використовуючи find / c / v "" yourinput.file , отримайте кількість рядків у вхідному файлі. Вихід має щось на кшталт:
---------- T.TXT: 15
2) Використовуючи для / f , проаналізуйте цей вихід, щоб отримати число 15.
3) Використовуючи set / a , обчисліть кількість ліній заголовків, які потрібно пропустити
4) Використовуючи для / f "skip = n" пропустіть лінії голови та відлуння / обробіть лінії хвоста.
Якщо я знайду час, я зберу такий пакетний файл і опублікую його тут.
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
Спробуйте служби Windows для UNIX . Забезпечує мушлі, awk, sed тощо, а також хвіст.
Оновлення -: На жаль, станом на 2019 рік ця система більше не доступна в Центрі завантаження Microsoft.
Я віддаю перевагу TailMe через можливість перегляду декількох файлів журналу одночасно в одному вікні: http://www.dschensky.de/Software/Staff/tailme_en.htm
DOS не має хвостової команди; ви можете завантажити бінарний файл Windows для хвоста GNU та інші інструменти GNU тут .
Іншим варіантом було б встановлення MSYS (що має легшу вагу, ніж Cygwin).
Я щойно написав цей маленький пакетний сценарій. Це не так складно, як "хвіст" Unix, але, сподіваємось, хтось може додати його до вдосконалення, наприклад обмеження виводу останніми 10 рядками файлу тощо. Якщо ви вдосконалите цей скрипт, надішліть його мені при пограбуванні ~ [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.
із кінцевою крапкою на слові (а не як окремий аргумент), вона надрукує один новий рядок.
tail
Команди багато інших доступні в Сервіс Windows Resource Kit пакета.
Якщо ви хочете використовувати порти Win32 деяких утиліт Unix (а не встановлювати Cygwin), я рекомендую утиліти GNU для Win32 .
Легша вага, ніж у Cygwin, і більш портативна.
Встановіть інструментарій MKS ... Щоб ви могли запускати всі команди Unix у Windows.
Команда така:
tail -f <file-name>
У програмі Far Manager натисніть F3на файл, щоб увійти в стандартний переглядач, а потім Endклавішу для переходу до кінця файлу.
Якщо файл буде оновлений, Far Manager прокрутить його автоматично.
Я використовую Kiwi Log Viewer . Це безкоштовно.
Переглядачі графічних журналів, хоча вони можуть бути дуже хорошими для перегляду файлів журналів, не відповідають потребі утиліти командного рядка, яка може бути включена до сценаріїв (або пакетних файлів). Часто така проста команда загального призначення може використовуватися як частина спеціалізованого рішення для певного середовища. Графічні методи не піддаються такому використанню.
Я думаю, що я знайшов утиліту, яка відповідає потребі хвостової функції у пакетних файлах. Це називається "mtee", і це безкоштовно. Я включив його в пакетний файл, над яким я працюю, і він дуже добре виконує роботу. Просто переконайтеся, що ви ставите виконувану програму у каталог у PATH, і ви вирушаєте.
Ось посилання: