Еквівалент Windows команди хвоста Unix [закрито]


410

Я шукаю еквівалент команди "хвіст" Unix, яка дозволить мені спостерігати вихід файлу журналу під час його запису.


Чи допомагає це? http://malektips.com/xp_dos_0001.html http://commandwindows.com/server2003tools.htm Ось пряме посилання Microsoft. Я перевірив його на своїй машині (просто з цікавості і тому, що мені це може знадобитися), і він працює чудово.
Johnny

1
Фактично є хвіст для XP. Просто Microsoft не встановлює його зі стандартною версією XP; вони упакували його в "Інструменти набору ресурсів Windows Server 2003". Отримати його можна тут: microsoft.com/downloads/…
Метт Пуш

1
Не вимагайте дупи, але дивіться тут stackoverflow.com/questions/247234/…
Мартін Беккет

mobaXTerm, це безкоштовно та має журнал плагінів, ви можете робити хвостик -f /drives/c/logs/mylog.log
surfealokesea

3
Я не думаю, що це мало бути закритим, оскільки мені потрібна ця сама річ для налагодження трасування в моєму додатку Windows. Йдеться про "програмні засоби, які зазвичай використовуються програмістами", на тему
kristianp

Відповіді:


137

Я б запропонував встановити щось на зразок GNU Utilities для Win32 . У нього більшість фаворитів, в тому числі хвіст.


5
Я просто спробував використати GNU tailна 2 ГБ файл, і він захлинувся. moreдобре працював (принаймні, перегляд початку файлу).
Ерік Дж.

@EricJ., Те ж саме для мене. На файлі об'ємом 3 ГБ я можу зробити, headале не tail... Ідеї?
Альфаа

@Alphaaa: Я підозрюю, що це стосується викликів ОС, якими користуються GNU Utilities. Дивіться stackoverflow.com/a/4003487/141172
Ерік Дж.

@EricJ., Дякую, це справді здається актуальним. Але я просто зрозумів, що мені легше використовувати спосіб вирішення: я просто збираюся написати простий сценарій, який робить tail:)
Alphaaa

1
Ось я вважаю, що це краще рішення: stackoverflow.com/questions/4426442/…
гній

441

Якщо ви використовуєте PowerShell, це працює:

Get-Content filenamehere -Wait -Tail 30

Публікуємо коментар Стефана знизу, тому люди цього не пропускають

PowerShell 3 вводить параметр -Tail для включення лише останніх x рядків


13
Насправді це не динамічно
Jey Geethan

16
Про це добре знати; Дякую. Але у мене було з цим пару проблем (у Windows 7). (1) він відображає весь файл (не добре для масивного файлу журналу, тому tailможе бути корисним) (2) це не так динамічно, як хотілося б (можливо, через зміни ОС / файлової системи між моєю установкою та іншими плакатами ?). Тобто я визначив, що Get-Contentінколи оболонка іноді не оновлюється, поки я не запущу dirіншу оболонку.
mpontillo

10
Я думаю, що варто згадати, що PowerShell призупинить прокручування / вихід, якщо ви виберете щось у вікні терміналу, щоб дати вам можливість прочитати, скопіювати / вставити тощо. Якщо натиснути клавішу Enter, вона продовжить прокручування.
cеднарський

18
PowerShell 3 вводить параметр -Tail для включення лише останніх x рядків
Stefan Haberl

8
Тож чи не повинна правильна відповідь для Powershell бути чимось подібним Get-Content -Tail 100 -Wait .\logfile.log?
Генно Вермеулен

62

Я завжди використовував Baretail для хвостів у Windows. Це безкоштовно і досить приємно.

Редагувати: для кращого опису Baretail див. Це питання


Це стало першим рішенням, яке працювало для мене на [gulp] Windows Server 2003 R2 SP1! Супер легко з інсталятором, працював над обробкою хвостами прямо з коробки :)
cellepo

Завантаження та виконання непідписаних виконуваних файлів через HTTP, ймовірно, не є хорошою ідеєю. Як мінімум, слід завантажити їх HTTPS-сайт .
Zero3

Мені здається дивовижним те, що вони продовжують підтримувати сайт та оновлювати сертифікат SSL на сьогоднішній день, тоді як програмне забезпечення не оновлюється з 2006 року. Хоча це чудово працює. Саме те, що мені було потрібно. Windows Defender не загрожує.
Ліонет Чен


24

Усі, хто цікавиться хвостом 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

Це розумно, і я все про використання існуючої функціональності під час завантаження інструменту не є можливим! Цей код буде харчуватися процесором, оскільки він буде постійно обертатися під час подачі на -f.
armstrhb

1
була така ж проблема з завантаженням та поїданням процесора! додав цей рядок ping 127.0.0.1 -n 2 > nulраніше goto followloop. він надсилає два пінгви і чекає 1 сек між ними. так що це дозволить процесору жити!: D
Mohsen ZareZardeyni

Дивовижно! Велике спасибі
Джон Фербенкс

1
навіщо використовувати ping, якщо ви могли використовувати timeout /t 2?
namezero

23

Варіантів існує досить багато, проте всі вони мають вади з більш досконалими функціями.

  • Хвіст GnuWin32 баггі ( α β γ ) - такі речі, як -f просто не працюють.

  • Хвіст UnxUtils здається кращим (-f працює, але - швидше здається, -n, але не --lines = n не вдається з -f), але здається, це мертвий проект.

  • Cygwin - це велика потворна каша, вона, можливо, може просто використовувати пакет DLL та coreutils - але все ще є такі проблеми, як --pid не працює з нативними процесами win32.


19

Я використовував Tail для Windows . Звичайно, не настільки елегантно, як у використанні

хвіст
але тоді ви використовуєте Windows. ;)


Я другий Tail для Windows. Мені це подобається, тому що я можу відкривати та контролювати декілька файлів у одному вікні.
Пол

powerhell gc -tail спосіб не працює, якщо ви працюєте на Posh 1 або Posh 2.x. Функція gc -tail була додана в Posh 3.0.
користувач1390375


15

Я тут не бачив експертів журналу серед відповідей.

Це налаштовується і дуже добре для обходу файлів журналів. Поки що це найкращий переглядач графічного журналу Windows для мене.

На жаль, це програмне забезпечення більше не доступне. Про це можна прочитати на archive.org .


Я люблю функції Log Expert, однак мій досвід баггі з ним на Win 7 64 біт.
Глина

Мені не вистачає функцій "чіткого перегляду".
Даніель Харі

13

Якщо ви нічого не хочете встановлювати, ви можете "створити свій" пакетний файл, який виконує завдання зі стандартних команд 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

5
Ось партія попереднього пояснення. Він відображає останні 10 рядків поточного файлу: ____ for / f "tokens = 3" %% f in ('find / c / v ""% 0') set set nbLines = %% f ____ set / a nbSkippedLines = % nbLines% -10 ____ для / f "пропустити =% nbSkippedLines% delims =" %% d у (% 0) зробить відлуння %% d
Ніколас

1
Це саме те, чого хоче плакат, і це працює чудово.
Джекі Єх

Дякуємо за код! Я додав його до відповіді з виправленим номером параметра та додатковим номером до рядків. Зверніть увагу, що він покаже лінії виходу. PS: Я використовував його для хвоста на 1,5 Гбіт файл і отримав результати всього за 15 секунд.
Леопольдо Санчик

Насправді, на кроці №4 було б навіть краще, я думаю використовувати команду 'more', яка приймає параметри щодо кількості рядків для пропуску. Ще швидше я би подумав.
Філіберт Персе

8

Я використовував Mtail останнім часом, і він, здається, працює добре. Це такий тип GUI, як згаданий вище баретей. введіть тут опис зображення


5

Завантажте хвостову команду, частину Windows Server 2003 Resource Kit Toolsвід самого Microsoft .


1
Вам не здається дивним, як виглядає посилання, яке б вказувало на Microsoft, але це не так? :)
Томалак


5

Спробуйте служби Windows для UNIX . Забезпечує мушлі, awk, sed тощо, а також хвіст.

Оновлення -: На жаль, станом на 2019 рік ця система більше не доступна в Центрі завантаження Microsoft.


1
Це проблеми з Win7 та новішими.
Дуг Вілсон

1
Дійсно? Ви оббігаєте відповіді чотирирічного голосування? Спосіб внеску.
Дейв

9
@Dave: Хоча питання давнє, люди все ще дивляться на нього, намагаючись знайти найкращу відповідь. Якщо відповідь, навіть майже 5 років тому, вже не є актуальною чи доброю, то чому б не слід її спростовувати? Весь цей сайт швидше отримує цінну інформацію - сьогодні, а не 5 років тому.
Олівер

1
@Hellfire - вам слід редагувати відповідь за умови, що вона не працює з Wwindows 7. Дурно просто коментувати.
Преет Сангха


4

DOS не має хвостової команди; ви можете завантажити бінарний файл Windows для хвоста GNU та інші інструменти GNU тут .



4

DOS typeпрацює на зразок * nux cat, хоч просто так cat, але він скидає весь файл, тому він насправді не є правдою tail, але він буде доступний у дрібці, не завантажуючи / не встановлюючи справжній tailзамінник.


4

Я щойно написав цей маленький пакетний сценарій. Це не так складно, як "хвіст" 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

хороша ідея, використовуючи команду "type", але ви не можете до неї подати!
eadmaster

Це просто продовжує перезавантажувати текстовий файл.

пакетна версія ехо має дивну поведінку, якщо не задано жодних аргументів, вона просто виходить, але якщо ви будете викликати команду, як echo.із кінцевою крапкою на слові (а не як окремий аргумент), вона надрукує один новий рядок.
скрагар

4

tailКоманди багато інших доступні в Сервіс Windows Resource Kit пакета.


Я спробував скористатися цією командою хвоста, а для хвоста -n, здається, він фактично надрукує останні n + 1 рядки
ajs410




3

У програмі Far Manager натисніть F3на файл, щоб увійти в стандартний переглядач, а потім Endклавішу для переходу до кінця файлу.

Якщо файл буде оновлений, Far Manager прокрутить його автоматично.



0

Переглядачі графічних журналів, хоча вони можуть бути дуже хорошими для перегляду файлів журналів, не відповідають потребі утиліти командного рядка, яка може бути включена до сценаріїв (або пакетних файлів). Часто така проста команда загального призначення може використовуватися як частина спеціалізованого рішення для певного середовища. Графічні методи не піддаються такому використанню.



0

Я думаю, що я знайшов утиліту, яка відповідає потребі хвостової функції у пакетних файлах. Це називається "mtee", і це безкоштовно. Я включив його в пакетний файл, над яким я працюю, і він дуже добре виконує роботу. Просто переконайтеся, що ви ставите виконувану програму у каталог у PATH, і ви вирушаєте.

Ось посилання:

mtee

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.