Windowsowy odpowiednik komendy uniksowej ogona [zamknięty]


410

Szukam ekwiwalentu uniksowego polecenia „tail”, które pozwoli mi oglądać dane wyjściowe pliku dziennika podczas jego zapisywania.


czy to pomaga? http://malektips.com/xp_dos_0001.html http://commandwindows.com/server2003tools.htm Oto bezpośredni link Microsoft. Przetestowałem to na moim komputerze (tylko z ciekawości i dlatego, że być może potrzebuję) i działa dobrze.
Johnny

1
Tak naprawdę jest ogon dla XP, po prostu Microsoft nie instaluje go ze standardową wersją XP; spakowali go w „Windows Server 2003 Resource Kit Tools”. Możesz go pobrać tutaj: microsoft.com/downloads/…
Matt Poush

1
Nie tylko dupek, ale patrz tutaj stackoverflow.com/questions/247234/…
Martin Beckett,

mobaXTerm, jest darmowy i ma dziennik wtyczek, możesz zrobić tail -f /drives/c/logs/mylog.log
surfealokesea

3
Nie sądzę, że powinno to zostać zamknięte, ponieważ potrzebuję tego samego do debugowania śledzenia w mojej aplikacji Windows. Chodzi o „narzędzia programowe powszechnie używane przez programistów”, które są na ten temat
kristianp

Odpowiedzi:


137

Sugeruję zainstalowanie czegoś takiego jak GNU Utilities dla Win32 . Ma większość ulubionych, w tym ogon.


5
Właśnie próbowałem użyć GNU tailna pliku 2 GB i dusił się. moredziałało dobrze (przynajmniej przeglądając początek pliku).
Eric J.

@EricJ., To samo dla mnie. Na pliku 3 GB mogę zrobić, headale nie tail... Pomysły?
Alphaaa,

@Alphaaa: Podejrzewam, że ma to związek z wywołaniami systemu operacyjnego używanymi przez GNU Utilities. Zobacz stackoverflow.com/a/4003487/141172
Eric J.

@EricJ., Dzięki, to wydaje się być rzeczywiście istotne. Ale właśnie zdałem sobie sprawę, że łatwiej jest mi użyć obejścia: po prostu napiszę prosty skrypt, który robi tail:)
Alphaaa 24.04.2013

1
Tutaj uważam, że jest lepszym rozwiązaniem: stackoverflow.com/questions/4426442/…
Dung

441

Jeśli używasz programu PowerShell, działa to:

Get-Content filenamehere -Wait -Tail 30

Publikowanie komentarza Stefana od dołu, aby ludzie nie przegapili tego

PowerShell 3 wprowadza parametr -Tail w celu uwzględnienia tylko ostatnich x linii


13
W rzeczywistości nie jest to dynamiczne
Jey Geethan

16
Warto o tym wiedzieć; dzięki. Ale miałem z tym kilka problemów (w systemie Windows 7). (1) wyświetla cały plik (nie nadaje się do ogromnego pliku dziennika, dlatego tailmoże być przydatny) (2) nie jest tak dynamiczny, jak bym chciał (może z powodu zmian systemu operacyjnego / systemu plików między moją instalacją a innymi plakatami ?). To znaczy, ustaliłem, że powłoka Get-Contentczasami się nie aktualizuje, dopóki nie uruchomię dirinnej powłoki.
mpontillo

10
Myślę, że warto wspomnieć, że PowerShell wstrzyma przewijanie / wyjście, jeśli wybierzesz coś w oknie terminala, aby dać ci szansę na czytanie, kopiowanie / wklejanie itp. Jeśli naciśniesz Enter, wznowi przewijanie.
cbednarski

18
PowerShell 3 wprowadza parametr -Tail w celu uwzględnienia tylko ostatnich x linii
Stefan Haberl

8
Czy poprawna odpowiedź na PowerShell nie powinna być czymś takim Get-Content -Tail 100 -Wait .\logfile.log?
Henno Vermeulen

62

Zawsze używałem Baretail do tailowania w Windowsie. Jest darmowy i całkiem ładny.

Edytuj: dla lepszego opisu Baretail zobacz to pytanie


To okazało się pierwszym rozwiązaniem, które działało dla mnie na [gulp] Windows Server 2003 R2 SP1! Super łatwe z instalatorem, pracował od razu po wyjęciu z pudełka :)
cellepo

Pobieranie i wykonywanie niepodpisanych plików wykonywalnych przez HTTP prawdopodobnie nie jest dobrym pomysłem. Przynajmniej należy pobrać za pośrednictwem strony HTTPS .
Zero3

Wydaje mi się niesamowite, że nadal utrzymują witrynę i aktualizują certyfikat SSL, a oprogramowanie nie aktualizuje się od 2006 roku. Działa to jednak dobrze. Dokładnie to, czego potrzebowałem. Program Windows Defender nie znajduje zagrożenia.
Lionet Chen


24

Każdy zainteresowany ogonem DOS CMD za pomocą poleceń wsadowych (patrz poniżej).

To nie jest prefekt, a linie czasami się powtarzają.

Zastosowanie: 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

Jest to sprytne i chcę korzystać z istniejących funkcji, gdy pobieranie narzędzia nie jest opcją! Ten kod zje jednak procesor, ponieważ będzie ciągle wirował w odpowiedzi na -f.
armstrhb

1
miał ten sam problem z pobieraniem i jedzeniem procesora! dodał ten wiersz ping 127.0.0.1 -n 2 > nulwcześniej goto followloop. wysyła dwa pingi i czeka 1 sekundę między nimi. więc pozwoliłoby to żyć cpu!: D
Mohsen ZareZardeyni

Niesamowite! Dziękuję bardzo
John Fairbanks,

1
po co stosować ping, jeśli można go wykorzystać timeout /t 2?
namezero

23

Istnieje wiele opcji, jednak wszystkie mają wady z bardziej zaawansowanymi funkcjami.

  • Ogon GnuWin32 jest wadliwy ( α β γ ) - rzeczy takie jak -f po prostu nie działają.

  • Ogon UnxUtils wydaje się lepszy (-f działa, ale --pid wydaje się nie działać, -n ale nie --lines = n kończy się niepowodzeniem z -f), ale wydaje się być martwym projektem.

  • Cygwin to duża brzydka papka, być może mogłaby po prostu użyć biblioteki DLL i pakietu coreutils - ale nadal ma problemy, takie jak - nie działa z natywnymi procesami win32.


19

Użyłem Tail For Windows . Z pewnością nie tak elegancki jak używanie

ogon
ale używasz Windowsa. ;)


I drugi ogon dla Windows. Podoba mi się, ponieważ mogę otwierać i monitorować wiele plików w tym samym oknie.
Paul

PowerScc Gc -tail sposób nie działa, jeśli masz Posh 1 lub Posh 2.x. Funkcję gc -tail dodano w Posh 3.0.
user1390375,

16

Dzięki Windows PowerShell możesz używać:

Get-Content <file> -Wait

15

Nigdzie nie widziałem Log Expert wśród odpowiedzi tutaj.

Można go dostosować i jest całkiem dobry do przeglądania plików dziennika. Jak dotąd jest to dla mnie najlepsza przeglądarka graficznych dzienników systemu Windows.

Niestety, to oprogramowanie nie jest już dostępne. Możesz przeczytać o tym na archive.org .


Uwielbiam funkcje Log Expert, jednak moje doświadczenie nie działa z nim w systemie Windows 7 64-bit.
Clay

Brakuje mi funkcji „wyraźnego widoku”.
Daniel Hári

13

Jeśli nie chcesz nic instalować, możesz „zbudować własny” plik wsadowy, który wykonuje zadanie na podstawie standardowych poleceń systemu Windows. Oto kilka wskazówek, jak to zrobić.

1) Korzystając z find / c / v "" pliku.input " , uzyskaj liczbę linii w pliku wejściowym. Wynik jest podobny do:

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

2) Używając for / f , przeanalizuj to wyjście, aby uzyskać liczbę 15.

3) Za pomocą set / a obliczyć liczbę linii, które należy pominąć

4) Używając for / f "skip = n" pomiń nagłówki i wykonaj echo / przetworz linie ogona.

Jeśli znajdę czas, zbuduję taki plik wsadowy i opublikuję go tutaj.

EDYTOWAĆ: 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
Oto część poprzedniego wyjaśnienia. Wyświetla 10 ostatnich wierszy bieżącego pliku: ____ for / f "tokens = 3" %% f in ('find / c / v ""% 0') ustaw nbLines = %% f ____ set / a nbSkippedLines = % nbLines% -10 ____ dla / f "skip =% nbSkippedLines% delims =" %% d in (% 0) echo %% d
Nicolas

1
Właśnie tego chce plakat i działa dobrze.
Jackie Yeh,

Dzięki za kod! Dodałem go do odpowiedzi z poprawionym numerem parametru i dodatkowym do liczby linii. Zauważ, że wyświetli linie wyjście. PS: Użyłem go do ogonienia pliku 1,5 Gb i uzyskałem wyniki w zaledwie 15 sekund.
Leopoldo Sanczyk

Właściwie w kroku # 4 byłoby jeszcze lepiej pomyśleć o użyciu polecenia „więcej”, które przyjmuje parametry co do liczby linii do pominięcia. Myślę, że nawet szybciej.
Philibert Perusse

8

Ostatnio używałem Mtail i wydaje się, że działa dobrze. Jest to typ GUI, jak wspomniany powyżej baretail. wprowadź opis zdjęcia tutaj



5

Wypróbuj Usługi Windows dla UNIX . Zapewnia muszle, awk, sed itp., A także ogon.

Aktualizacja -: Niestety, od 2019 roku ten system nie jest już dostępny w Centrum pobierania Microsoft.


1
Ma to problemy z Win7 i nowszymi.
Doug Wilson

1
Naprawdę? Biegasz wokół czteroletnich odpowiedzi w głosowaniu w dół? Sposób na wniesienie wkładu.
Dave

9
@Dave: Mimo że pytanie jest stare, ludzie wciąż na nie patrzą, starając się znaleźć najlepszą odpowiedź. Jeśli odpowiedź sprzed prawie 5 lat nie jest już aktualna ani trafna, to dlaczego nie należy głosować za nią? Cała ta strona polega na szybszym uzyskiwaniu cennych informacji - dziś, nie 5 lat temu.
Oliver

1
@Hellfire - powinieneś edytować odpowiedź z zastrzeżeniem, że nie działa ona z Wwindows 7. Głupotą jest komentowanie.
Preet Sangha


4

DOS nie ma polecenia ogona; możesz pobrać plik binarny Windows dla GNU tail i innych narzędzi GNU tutaj .



4

DOS typedziała jak * nux cat, chociaż tak samo cat, zrzuca cały plik, więc to nie jest tak naprawdę prawda tail, ale będzie dostępny w mgnieniu oka bez pobierania / instalowania prawdziwego tailzamiennika.


4

Właśnie napisałem ten mały skrypt partii. Nie jest tak wyrafinowany jak „ogon” Uniksa, ale mam nadzieję, że ktoś może go dodać, aby go ulepszyć, na przykład ograniczając wyjście do 10 ostatnich linii pliku itp. Jeśli ulepszysz ten skrypt, prześlij go do mnie na rabowaniu ~ [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

fajny pomysł za pomocą polecenia „typ”, ale nie można do niego potokować!
eadmaster

To po prostu powoduje ponowne załadowanie pliku tekstowego.

wsadowa wersja echa ma dziwne zachowanie, jeśli nie otrzyma żadnych argumentów, po prostu wyjdzie, ale jeśli wywołasz polecenie jak echo.z kropką na słowie (a nie jako osobny argument), wypisze pojedynczy nowy wiersz.
scragar




3

W programie Far Manager naciśnij F3plik, aby przejść do standardowej przeglądarki, a następnie Endklawisz, aby przejść do końca pliku.

Jeśli plik zostanie zaktualizowany, Far Manager przewinie go automatycznie.



0

Graficzne przeglądarki dzienników, chociaż mogą być bardzo dobre do przeglądania plików dziennika, nie spełniają potrzeby narzędzia wiersza poleceń, które można włączyć do skryptów (lub plików wsadowych). Często takie proste i ogólne polecenie może być używane jako część specjalistycznego rozwiązania dla określonego środowiska. Metody graficzne nie nadają się do takiego użycia.



0

Myślę, że znalazłem narzędzie, które spełnia potrzebę funkcji tail w plikach wsadowych. Nazywa się „mtee” i jest bezpłatny. Włączyłem go do pliku wsadowego, nad którym pracuję, i robi to bardzo dobrze. Wystarczy umieścić plik wykonywalny w katalogu w instrukcji PATH i gotowe.

Oto link:

mtee

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.