Windows-эквивалент хвостовой команды Unix [закрыто]


410

Я ищу эквивалент команды Unix 'tail', которая позволит мне наблюдать за выводом файла журнала во время его записи.


Это помогает? http://malektips.com/xp_dos_0001.html http://commandwindows.com/server2003tools.htm Вот прямая ссылка Microsoft. Я проверил его на своей машине (просто из любопытства и потому, что он мне может понадобиться), и он отлично работает.
Джонни

1
На самом деле есть хвост для XP, просто Microsoft не устанавливает его со стандартной версией XP; они упаковали его в «Windows Server 2003 Resource Kit Tools». Вы можете получить его здесь: microsoft.com/downloads/…
Мэтт Поуш,

1
Не точно обман, но посмотрите здесь stackoverflow.com/questions/247234/…
Мартин Беккет

mobaXTerm, это бесплатно и имеет журнал плагинов, вы можете сделать tail -f /drives/c/logs/mylog.log
surfealokesea

3
Я не думаю, что это должно было быть закрыто, поскольку мне нужно то же самое для отладки трассировки в моем приложении Windows. Речь идет о «программных инструментах, обычно используемых программистами», о которых идет
речь

Ответы:


137

Я бы предложил установить что-то вроде GNU Utilities для Win32 . У этого есть большинство фаворитов, включая хвост.


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

@EricJ., То же самое для меня. На файл 3GB я могу сделать, headно не tail... Идеи?
Alphaaa

@Alphaaa: я подозреваю, что это связано с вызовами ОС, которые использует GNU Utilities. См. Stackoverflow.com/a/4003487/141172
Эрик Дж.

@EricJ., Спасибо, это действительно актуально. Но я только что понял, что мне проще использовать обходной путь: я просто собираюсь написать простой скрипт, который выполняет tail:)
Alphaaa

1
Здесь я считаю, что это лучшее решение: stackoverflow.com/questions/4426442/…
Dung

442

Если вы используете 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, он возобновит прокрутку.
cbednarski

19
В PowerShell 3 введен параметр -Tail, включающий только последние x строк
Стефан Хаберл,

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 не находит угрозы.
Лионет Чен


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
Мохсен ЗареЗардейни

Потрясающие! Большое спасибо
Джон Фэрбенкс

1
зачем использовать пинг, если вы можете использовать timeout /t 2?
Namezero

23

Существует довольно много вариантов, однако все они имеют недостатки с более продвинутыми функциями.

  • Хвост GnuWin32 глючит ( α β γ ) - такие вещи, как -f просто не работают.

  • Хвост UnxUtils кажется лучше (-f работает, но --pid, кажется, нет, -n, но не --lines = n не работает с -f), но кажется мертвым проектом.

  • Cygwin - большой уродливый месив, может, возможно, просто использует DLL и пакет coreutils - но все еще имеет проблемы, такие как --pid не работает с собственными процессами win32.


19

Я использовал Tail For Windows . Конечно, не так элегантно, как при использовании

хвост
но тогда вы используете Windows. ;)


Я второй Tail для Windows. Мне это нравится, потому что я могу открывать и контролировать несколько файлов в одном окне.
Пол

способ powershell gc -tail не работает, если вы используете Posh 1 или Posh 2.x. Функциональность gc -tail была добавлена ​​в Posh 3.0.
user1390375


15

Я не видел Log Expert нигде среди ответов здесь.

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

К сожалению, это программное обеспечение больше не доступно. Вы можете прочитать об этом на archive.org .


Мне нравятся функции Log Expert, однако в Win 7 64 bit мой опыт был ошибочным.
Глина

Я скучаю по "четкому виду" функциональности.
Даниэль Хари

13

Если вы вообще не хотите ничего устанавливать, вы можете «создать свой» пакетный файл, который выполняет эту работу из стандартных команд Windows. Вот несколько советов о том, как это сделать.

1) Используя find / c / v "" yourinput.file , получите количество строк во входном файле. Вывод что-то вроде:

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

2) Используя for / f , проанализируйте этот вывод, чтобы получить число 15.

3) Используя set / a , рассчитайте количество заголовков, которые нужно пропустить

4) Используя for / 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 строк текущего файла: ____ для / f "tokens = 3" %% f in ('find / c / v ""% 0') do set nbLines = %% f ____ set / a nbSkippedLines = % nbLines% -10 ____ для / f "skip =% nbSkippedLines% delims =" %% d в (% 0) do echo %% d
Николас

1
Это именно то, что хочет плакат, и он работает просто отлично.
Джеки Йе

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

На самом деле, на шаге 4 было бы даже лучше, если бы я использовал команду «more», которая принимает параметры для количества пропускаемых строк. Еще быстрее я бы подумал.
Филиберт Перусс

8

Я недавно использовал Mtail, и, похоже, он работает хорошо. Это тип GUI, подобный baretail, упомянутому выше. введите описание изображения здесь


5

Загрузите команду tail, часть Windows Server 2003 Resource Kit Toolsот самой Microsoft .


1
Вам не кажется странным, как выглядит ссылка, как если бы она указывала на Microsoft, но это не так? :)
Томалак


5

Попробуйте службы Windows для UNIX . Предоставляет снаряды, awk, sed и т. Д., А также хвост.

Обновление -: К сожалению, с 2019 года эта система больше не доступна в Центре загрузки Microsoft.


1
Это имеет проблемы на Win7 и новее.
Дуг Уилсон

1
В самом деле? Ты бегаешь с отрицательным голосованием четырехлетних ответов? Способ внести свой вклад.
Дэйв

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

1
@Hellfire - вы должны редактировать ответ при условии, что он не работает с Wwindows 7. Глупо просто комментировать.
Прит Сангха




4

DOS typeработает как * nux cat, хотя точно так же cat, как и дамп всего файла, так что это не совсем правда tail, но он будет доступен в крайнем случае без загрузки / установки истинной tailзамены.


4

Я только что написал этот маленький пакетный скрипт. Он не такой сложный, как «хвост» Unix, но, надеюсь, кто-то может добавить к нему, чтобы улучшить его, например, ограничить вывод последними 10 строками файла и т. Д. Если вы улучшаете этот скрипт, пожалуйста, отправьте его мне в ограблении ~ [в] ~ 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 ведет себя странно, если ей не даны аргументы, она просто завершается, но если вы вызываете команду как echo.завершающую точку в слове (а не как отдельный аргумент), она напечатает одну новую строку.
scragar

4

Команда tailи многие другие доступны в пакете инструментов Windows Resource Kit .


Я попытался использовать эту команду tail, и для tail -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.