Một Windows tương đương với lệnh đuôi Unix [đã đóng]


410

Tôi đang tìm kiếm tương đương với lệnh 'đuôi' Unix sẽ cho phép tôi xem đầu ra của tệp nhật ký trong khi nó được ghi vào.


Không giúp đỡ à? http://malektips.com/xp_dos_0001.html http://commandwindows.com/server2003tools.htmlm Đây là liên kết trực tiếp của Microsoft. Tôi đã thử nó trên máy của mình (vì tò mò và vì tôi có thể cần nó) và nó hoạt động tốt.
johnny

1
Thực sự đuôi cho XP, chỉ là Microsoft không cài đặt nó với phiên bản XP tiêu chuẩn; họ đã đóng gói nó trong 'Windows Server 2003 Resource Kit Tools'. Bạn có thể lấy nó ở đây: microsoft.com/doads/ Mạnh
Matt Muffh

1
Không exaclty một bản dupe nhưng xem tại đây stackoverflow.com/questions/247234/ Khăn
Martin Beckett

mobaXTerm, nó miễn phí và có nhật ký các plugin, bạn có thể thực hiện đuôi -f /drive/c/logs/mylog.log
Surfealokesea

3
Tôi không nghĩ rằng điều này nên được đóng lại, vì tôi cần điều tương tự để gỡ lỗi truy tìm trong ứng dụng windows của tôi. Đó là về "các công cụ phần mềm thường được các lập trình viên sử dụng", nằm trong chủ đề
kristianp

Câu trả lời:


137

Tôi khuyên bạn nên cài đặt một cái gì đó như GNU Utility cho Win32 . Nó có hầu hết các mục yêu thích, bao gồm cả đuôi.


5
Tôi vừa thử sử dụng GNU tailtrên tệp 2GB và nó bị sặc. morehoạt động tốt (ít nhất là xem phần đầu của tệp).
Eric J.

@EricJ., Tương tự đối với tôi. Trên tệp 3 GB tôi có thể làm headnhưng không tail... Ý tưởng?
Alphaaa

@Alphaaa: Tôi nghi ngờ nó phải thực hiện với các cuộc gọi HĐH mà GNU Utility sử dụng. Xem stackoverflow.com/a/4003487/141172
Eric J.

@EricJ., Cảm ơn, điều đó có vẻ thực sự có liên quan. Nhưng tôi chỉ nhận ra rằng việc sử dụng một cách giải quyết dễ dàng hơn đối với tôi: Tôi sẽ viết một kịch bản đơn giản thực hiện tail:)
Alphaaa

1
Ở đây tôi tin là một giải pháp tốt hơn: stackoverflow.com/questions/4426442/ Nâng
Dung

442

Nếu bạn sử dụng PowerShell thì nó hoạt động:

Get-Content filenamehere -Wait -Tail 30

Đăng bình luận của Stefan từ bên dưới, vì vậy mọi người đừng bỏ lỡ nó

PowerShell 3 giới thiệu một tham số -Tail chỉ bao gồm các dòng x cuối cùng


13
Trên thực tế, điều này không năng động
Jey Geethan

16
Điều này là tốt để biết về; cảm ơn. Nhưng tôi đã có một vài vấn đề với nó (trên Windows 7). (1) nó hiển thị toàn bộ tệp (không tốt cho tệp nhật ký lớn, đó là lý do tại sao tailcó thể hữu ích) (2) nó không động như tôi muốn (có thể do thay đổi hệ điều hành / hệ thống tệp giữa thiết lập của tôi và các áp phích khác ?). Đó là, tôi xác định rằng shell thực hiện Get-Contentđôi khi không cập nhật cho đến khi tôi chạy dirtrong shell khác.
mpontillo

10
Tôi nghĩ rằng đáng để đề cập rằng PowerShell sẽ tạm dừng cuộn / ouput nếu bạn chọn thứ gì đó bên trong cửa sổ terminal để cho bạn cơ hội đọc, sao chép / dán, v.v. Nếu bạn nhấn Enter, nó sẽ tiếp tục cuộn.
cbednarski

19
PowerShell 3 giới thiệu một tham số -Tail chỉ bao gồm các dòng x cuối cùng
Stefan Haberl

8
Vì vậy, không nên trả lời đúng cho Powershell là như thế Get-Content -Tail 100 -Wait .\logfile.lognào?
Henno Vermeulen

62

Tôi đã luôn sử dụng Baretail để theo đuôi trong Windows. Nó miễn phí và khá đẹp.

Chỉnh sửa: để mô tả rõ hơn về Baretail, hãy xem câu hỏi này


Đây cuối cùng là giải pháp đầu tiên phù hợp với tôi trên [gulp] Windows Server 2003 R2 SP1! Siêu dễ dàng với trình cài đặt, làm việc để theo đuôi ngay lập tức ra khỏi hộp :)
cellepo

Tải xuống và thực thi các thực thi không dấu qua HTTP có lẽ không phải là một ý tưởng tốt. Ít nhất, một người nên tải xuống thông qua trang web HTTPS của họ .
Zero3

Tôi thấy thật tuyệt vời khi họ tiếp tục duy trì trang web và cập nhật chứng chỉ SSL cho đến nay, trong khi phần mềm không nâng cấp kể từ năm 2006. Mặc dù vậy nó vẫn hoạt động tốt. Chính xác những gì tôi cần. Windows Defender không tìm thấy mối đe dọa nào.
Lionet Chen


24

Bất cứ ai quan tâm đến đuôi DOS DOS bằng cách sử dụng các lệnh bó (xem bên dưới).

Nó không hoàn hảo, và đôi khi lặp lại.

Cách sử dụng: 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

Điều này thật thông minh và tôi hoàn toàn sử dụng chức năng hiện có khi tải xuống một công cụ không phải là một lựa chọn! Mã này sẽ ăn CPU, vì nó sẽ liên tục quay vòng theo dõi cho -f.
armstrhb

1
có cùng một vấn đề với tải về và ăn cpu! thêm dòng này ping 127.0.0.1 -n 2 > nultrước goto followloop. nó sẽ gửi hai ping và đợi 1 giây trong khoảng giữa. vì vậy nó sẽ cho cpu sống !: D
Mohsen ZareZardeyni

Tuyệt vời! Cảm ơn rất nhiều
John Fairbanks

1
Tại sao sử dụng ping nếu bạn có thể sử dụng timeout /t 2?
namezero

23

Có khá nhiều tùy chọn, tuy nhiên tất cả chúng đều có lỗ hổng với các tính năng cao cấp hơn.

  • GnuWin32 đuôi là buggy ( alpha beta gamma ) - những thứ như -f chỉ đơn giản không làm việc.

  • Đuôi UnxUtils có vẻ tốt hơn (-f hoạt động, nhưng --pid dường như không, -n nhưng không --lines = n thất bại với -f), nhưng dường như là một dự án đã chết.

  • Cygwin là một công cụ lớn xấu xí, có lẽ chỉ có thể sử dụng gói DLL và coreutils - nhưng vẫn có vấn đề như --pid không hoạt động với các quy trình win32 gốc.


19

Tôi đã sử dụng Tail cho Windows . Chắc chắn là không thanh lịch như sử dụng

đuôi
nhưng sau đó, bạn đang sử dụng Windows. ;)


Tôi thứ hai Tail cho Windows. Tôi thích nó vì tôi có thể mở và theo dõi nhiều tập tin trong cùng một cửa sổ.
Paul

cách gc-tail powershell không hoạt động nếu bạn đang sử dụng Posh 1 hoặc Posh 2.x. Chức năng gc -tail đã được thêm vào trong Posh 3.0.
dùng1390375

16

Với Windows PowerShell, bạn có thể sử dụng:

Get-Content <file> -Wait

15

Tôi chưa thấy Log Expert ở bất cứ đâu trong số các câu trả lời ở đây.

Nó có thể tùy chỉnh và khá tốt để đi xung quanh các tệp nhật ký. Cho đến nay nó là trình xem nhật ký đồ họa Windows tốt nhất đối với tôi.

Thật không may, phần mềm này không còn có sẵn. Bạn có thể đọc về nó trên archive.org .


Tôi yêu các tính năng của Log Expert, tuy nhiên trải nghiệm của tôi đã bị lỗi với Win 7 64 bit.
Clay

Tôi nhớ chức năng "xem rõ".
Daniel Hári

13

Nếu bạn không muốn cài đặt bất cứ thứ gì, bạn có thể "xây dựng tệp bó" của riêng mình, thực hiện công việc từ các lệnh Windows tiêu chuẩn. Dưới đây là một số gợi ý về cách làm điều đó.

1) Sử dụng find / c / v "" yourinput.file , lấy số lượng dòng trong tệp đầu vào của bạn. Đầu ra giống như:

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

2) Sử dụng cho / f , phân tích đầu ra này để lấy số 15.

3) Sử dụng tập hợp / a , tính toán số dòng đầu cần bỏ qua

4) Sử dụng for / f "Skip = n" bỏ qua các dòng đầu và echo / xử lý các dòng đuôi.

Nếu tôi tìm thấy thời gian, tôi sẽ xây dựng một tệp bó như vậy và gửi lại ở đây.

BIÊN TẬP: 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
Đây là lô của lời giải thích trước. Nó hiển thị 10 dòng cuối cùng của tệp hiện tại: ____ cho / f "tokens = 3" %% f trong ('find / c / v ""% 0') do đặt nbLines = %% f ____ set / a nbSkippedLines = % nbLines% -10 ____ cho / f "Skip =% nbSkippedLines% delims =" %% d in (% 0) thực hiện echo %% d
Nicolas

1
Đây chính xác là những gì người đăng muốn, và nó hoạt động tốt.
Jackie Yeh

Cảm ơn mã! Tôi đã thêm nó vào câu trả lời với số tham số đã sửa và thêm một vào số dòng. Lưu ý rằng nó sẽ hiển thị các dòng thoát. PS: Tôi đã sử dụng nó để theo dõi tệp 1,5Gb và nhận được kết quả chỉ sau 15 giây.
Leopoldo Sanchot

Trên thực tế, ở bước # 4, tôi nghĩ sẽ tốt hơn nếu sử dụng lệnh 'more' để lấy tham số về số lượng dòng cần bỏ qua. Thậm chí nhanh hơn tôi sẽ nghĩ.
Philibert Perusse

8

Tôi đã sử dụng Mtail gần đây và nó có vẻ hoạt động tốt. Đây là loại GUI giống như baretail đã đề cập ở trên. nhập mô tả hình ảnh ở đây



5

Hãy dùng thử Dịch vụ Windows cho UNIX . Cung cấp vỏ, awk, sed, vv cũng như đuôi.

Cập nhật -: Thật không may, kể từ năm 2019, hệ thống này không còn có sẵn trên Trung tâm Tải xuống của Microsoft.


1
Điều này có vấn đề trên Win7 và mới hơn.
Doug Wilson

1
Có thật không? Bạn đang chạy xung quanh bỏ phiếu bốn năm câu trả lời? Cách đóng góp.
Dave

9
@Dave: Mặc dù câu hỏi đã cũ, mọi người vẫn đang nhìn vào nó để cố gắng tìm câu trả lời tốt nhất. Nếu một câu trả lời từ thậm chí gần 5 năm trước không còn phù hợp hay tốt nữa, thì tại sao bạn không nên hạ thấp nó? Toàn bộ trang web này là về việc có được thông tin có giá trị nhanh hơn - ngày nay, không phải 5 năm trước.
Oliver

1
@Hellfire - bạn nên chỉnh sửa câu trả lời với điều kiện là nó không hoạt động với Wwindows 7. Thật ngớ ngẩn khi chỉ bình luận.
Preet Sangha


4

DOS không đuôi lệnh; bạn có thể tải xuống tệp nhị phân Windows cho đuôi GNU và các công cụ GNU khác tại đây .



4

DOS typehoạt động như * nux's cat, mặc dù cũng giống như vậy cat, nó kết xuất toàn bộ tập tin, vì vậy nó không thực sự đúng tail, nhưng nó sẽ có sẵn trong một nhúm mà không cần tải xuống / cài đặt một tailthay thế thực sự .


4

Tôi chỉ viết kịch bản lô nhỏ này. Nó không phức tạp như "đuôi" Unix, nhưng hy vọng ai đó có thể thêm vào nó để cải thiện nó, như giới hạn đầu ra ở 10 dòng cuối của tệp, v.v. Nếu bạn cải thiện tập lệnh này, vui lòng gửi nó với tôi lúc cướp ~ [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

ý tưởng hay bằng cách sử dụng lệnh "type", nhưng bạn không thể thực hiện được!
eadmaster

Điều này chỉ tiếp tục tải lại các tập tin văn bản.

phiên bản hàng loạt của echo có hành vi lạ, nếu không có đối số thì nó chỉ thoát, nhưng nếu bạn gọi lệnh như echo.với một dấu chấm trên từ (và không phải là một đối số riêng biệt) thì nó sẽ in một dòng mới.
scragar


3

Nếu bạn muốn sử dụng cổng Win32 của một số tiện ích Unix (thay vì cài đặt Cygwin), tôi khuyên dùng tiện ích GNU cho Win32 .

Trọng lượng nhẹ hơn Cygwin và di động hơn.



3

Trong Far Manager , nhấn F3vào một tệp để vào trình xem chuẩn, sau đó chọnEnd nhấn phím để điều hướng đến cuối tệp.

Nếu tệp được cập nhật, Far Manager sẽ tự động cuộn nó.



0

Trình xem nhật ký đồ họa, trong khi chúng có thể rất tốt để xem tệp nhật ký, không đáp ứng nhu cầu về tiện ích dòng lệnh có thể được tích hợp vào tập lệnh (hoặc tệp bó). Thông thường một lệnh đơn giản và có mục đích chung như vậy có thể được sử dụng như một phần của giải pháp chuyên biệt cho một môi trường cụ thể. Phương pháp đồ họa không cho vay dễ dàng sử dụng như vậy.



0

Tôi nghĩ rằng tôi đã tìm thấy một tiện ích đáp ứng nhu cầu cho chức năng đuôi trong các tệp bó. Nó được gọi là "mtee", và nó miễn phí. Tôi đã kết hợp nó vào một tệp bó tôi đang làm việc và nó thực hiện công việc rất độc đáo. Chỉ cần đảm bảo đặt tệp thực thi vào một thư mục trong câu lệnh PATH và bạn đi.

Đây là liên kết:

mtee

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.