【问题标题】:A Windows equivalent of the Unix tail command [closed]Unix tail 命令的 Windows 等效项[关闭]
【发布时间】:2010-09-16 07:11:42
【问题描述】:

我正在寻找相当于 Unix 'tail' 命令的功能,它允许我在写入日志文件时观察其输出。

【问题讨论】:

  • XP其实有尾,只是微软没有随标准版XP安装;他们将其打包在“Windows Server 2003 Resource Kit Tools”中。你可以在这里得到它:microsoft.com/downloads/…
  • 不是骗子,但请看这里stackoverflow.com/questions/247234/…
  • 13 ways to tail a log file on Windows(stackify.com,2013 年 2 月)
  • 我认为这不应该被关闭,因为我需要同样的东西来调试我的 Windows 应用程序中的跟踪。是关于“程序员常用的软件工具”的话题
  • 投票重新开放;这个问题是关于主题的,但只是因为没有就答案达成普遍共识而被关闭; SO 的格式是专门为 /find/ 该共识而设计的。

标签: windows tail


【解决方案1】:

如果您使用 PowerShell,则此方法有效:

Get-Content filenamehere -Wait -Tail 30

从下方发布 Stefan 的评论,让人们不要错过它

PowerShell 3 引入了一个 -Tail 参数以仅包含最后 x 行

【讨论】:

  • 其实这不是动态的
  • 这很好知道;谢谢。但我遇到了一些问题(在 Windows 7 上)。 (1)它显示整个文件(不适合大量日志文件,这就是为什么tail 可能有用)(2)它不像我想要的那样动态(可能是由于我的设置之间的操作系统/文件系统更改和其他海报?)。也就是说,我确定在另一个 shell 中运行 dir 之前,执行 Get-Content 的 shell 有时不会更新。
  • 我认为值得一提的是,如果您在终端窗口中选择某些内容,PowerShell 将暂停滚动/输出,让您有机会阅读、复制/粘贴等。如果您按 Enter,它将恢复滚动.
  • PowerShell 3 引入了一个 -Tail 参数以仅包含最后 x 行
  • 那么Powershell的正确答案不应该是Get-Content -Tail 100 -Wait .\logfile.log吗?
【解决方案2】:

我建议安装类似GNU Utilities for Win32 的东西。它有最喜欢的,包括尾巴。

【讨论】:

  • 我刚尝试在一个 2GB 的文件上使用 GNU 的 tail,结果卡住了。 more 工作正常(至少查看文件的开头)。
  • @EricJ.,对我来说也一样。在 3GB 文件上,我可以做 head 但不能做 tail... 想法?
  • @Alphaaa:我怀疑这与 GNU Utilities 使用的操作系统调用有关。见stackoverflow.com/a/4003487/141172
  • @EricJ.,谢谢,这似乎确实相关。但我刚刚意识到使用解决方法对我来说更容易:我只是要编写一个简单的脚本来执行tail :)
  • 这里我相信是一个更好的解决方案:stackoverflow.com/questions/4426442/…
【解决方案3】:

我一直使用Baretail 在 Windows 中进行拖尾。它是免费的,而且非常好。

【讨论】:

  • 这最终成为在 [gulp] Windows Server 2003 R2 SP1 上为我工作的第一个解决方案!安装程序超级简单,开箱即可轻松拖尾:)
  • 通过 HTTP 下载和执行未签名的可执行文件可能不是一个好主意。至少应该通过their HTTPS site下载。
  • 我发现他们一直在维护网站并更新 SSL 证书,而软件自 2006 年以来没有升级,这让我感到惊讶。不过它运行良好。正是我需要的。 Windows Defender 没有发现任何威胁。
  • 我的朋友太棒了,不记得这个名字了。 :)
【解决方案4】:

您可以将 tail 作为Cygwin 的一部分。

【讨论】:

    【解决方案5】:

    任何对使用批处理命令的 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
    

    【讨论】:

    • 这很聪明,当无法下载工具时,我只想利用现有功能!不过,这段代码会吃掉 CPU,因为它会在 -f 的后续过程中不断旋转。
    • 下载和吃cpu也有同样的问题!在goto followloop 之前添加了这一行ping 127.0.0.1 -n 2 &gt; nul。它发送两个 ping 并在其间等待 1 秒。所以它会让cpu活下去!:D
    • 太棒了!非常感谢
    • 如果可以使用timeout /t 2,为什么还要使用ping?
    【解决方案6】:

    有相当多的选项,但是它们都具有更高级功能的缺陷。

    • GnuWin32 tail 有问题 (α β γ) - 像 -f 这样的东西根本不起作用。

    • UnxUtils tail 似乎更好(-f 有效,但 --pid 似乎无效,-n 但不是 --lines=n 因 -f 而失败),但似乎是一个死项目。

    • Cygwin 是一个丑陋的大杂烩,也许可以只使用 DLL 和 coreutils package - 但仍然存在诸如 --pid 无法与本机 win32 进程一起使用的问题。

    【讨论】:

      【解决方案7】:

      我用过Tail For Windows。当然不如使用

      优雅
      tail
      但是,您使用的是 Windows。 ;)

      【讨论】:

      • 我是 Windows 的第二个 Tail。我喜欢它,因为我可以在同一个窗口中打开和监控多个文件。
      • 如果您使用的是 Posh 1 或 Posh 2.x,则 powershell gc -tail 方式不起作用。在 Posh 3.0 中添加了 gc -tail 功能。
      【解决方案8】:

      借助 Windows PowerShell,您可以使用:

      Get-Content <file> -Wait
      

      【讨论】:

        【解决方案9】:

        如果您根本不想安装任何东西,您可以“构建您自己的”批处理文件,通过标准 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
        

        【讨论】:

        • 这里是前面解释的批次。它显示当前文件的最后 10 行: ____ for /f "tokens=3" %%f in ('find /c /v "" %0') do set nbLines=%%f ____ set /a nbSkippedLines= %nbLines%-10 ____ for /f "skip=%nbSkippedLines% delims=" %%d in (%0) do echo %%d
        • 这正是发帖者想要的,而且效果很好。
        • 感谢代码!我用更正的参数号和额外的行数将它添加到答案中。请注意,它将显示退出的行。 PS:我用它拖尾了一个 1.5Gb 的文件,只用了 15 秒就得到了结果。
        • 实际上,在第 4 步,我认为使用“更多”命令会更好,该命令带有要跳过的行数的参数。我想会更快。
        【解决方案10】:

        我在这里的答案中没有看到 Log Expert。

        它是可定制的,非常适合处理日志文件。到目前为止,它是我最好的 Windows 图形日志查看器。

        很遗憾,该软件不再可用。您可以在 archive.org 上阅读。

        【讨论】:

        • 我喜欢 Log Expert 的功能,但是在 Win 7 64 位上我的体验一直是错误的。
        • 我想念“清晰视图”功能。
        【解决方案11】:

        我最近使用过Mtail,它似乎运行良好。这就是上面提到的类似baretail 的GUI 类型。

        【讨论】:

          【解决方案12】:

          Microsoft 本身下载tail 命令,Windows Server 2003 Resource Kit Tools 的一部分。

          【讨论】:

          【解决方案13】:

          试试Windows Services for UNIX。提供shell、awk、sed等以及tail。

          更新 -:很遗憾,自 2019 年起,该系统不再在 Microsoft 下载中心提供。

          【讨论】:

          • 这在 Win7 和更高版本上存在问题。
          • 真的吗?您正在四处投票否决四年前的答案?贡献的方式。
          • @Dave:尽管这个问题很老,但人们仍在寻找最佳答案。如果甚至近 5 年前的答案不再相关或不再好,那么为什么不应该否决它呢?整个网站旨在更快地获取有价值的信息 - 今天,而不是 5 年前。
          • @Hellfire - 您应该编辑答案,但前提是它不适用于 Wwindows 7。只发表评论很愚蠢。
          【解决方案14】:

          我更喜欢 TailMe,因为可以在一个窗口中同时查看多个日志文件:http://www.dschensky.de/Software/Staff/tailme_en.htm

          【讨论】:

            【解决方案15】:

            DOS 没有没有尾命令;您可以下载适用于 GNU tail 和其他 GNU 工具的 Windows 二进制文件here

            【讨论】:

              【解决方案16】:

              另一种选择是安装MSYS(比 Cygwin 更轻量级)。

              【讨论】:

                【解决方案17】:

                DOS 的type 与*nux 的cat 一样工作,虽然就像cat 一样,它确实会转储整个文件,所以它不是真正的tail,但它可以在紧要关头使用而无需下载/安装一个真正的tail 替代品。

                【讨论】:

                  【解决方案18】:

                  我刚刚写了这个小批处理脚本。它不像 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”命令的好主意,但你不能用管道传递它!
                  • 这只是不断地重新加载文本文件。
                  • echo 的批处理版本有奇怪的行为,如果没有给定参数,它就会退出,但是如果你将命令称为echo.,并在单词上加上一个尾随点(而不是作为单独的参数)它会打印一个新行。
                  【解决方案19】:

                  tail 命令和许多其他命令在 Windows Resource Kit Tools 包中可用。

                  【讨论】:

                  【解决方案20】:

                  如果你想使用一些 Unix 实用程序的 Win32 端口(而不是安装 Cygwin),我推荐GNU utilities for Win32

                  比 Cygwin 更轻,更便携。

                  【讨论】:

                    【解决方案21】:

                    安装MKS Toolkit...这样你就可以在Windows上运行所有的Unix命令了。

                    命令是:

                    tail -f <file-name>  
                    

                    【讨论】:

                      【解决方案22】:

                      Far Manager 中,在文件上按F3 进入标准查看器,然后按End 键导航到文件末尾。

                      如果文件有更新,Far Manager 会自动滚动。

                      【讨论】:

                        【解决方案23】:

                        图形日志查看器虽然可能非常适合查看日志文件,但不能满足对可合并到脚本(或批处理文件)中的命令行实用程序的需求。通常,这样一个简单且通用的命令可以用作特定环境的专用解决方案的一部分。图形方法不适合这种用途。

                        【讨论】:

                          【解决方案24】:

                          你也可以试试WinTail

                          ََ

                          【讨论】:

                            【解决方案25】:

                            我正在使用 Kiwi 日志查看器。它是免费的。

                            【讨论】:

                            • 每次安装 70 欧元。这不是免费的。
                            【解决方案26】:

                            我想我找到了一个实用程序,可以满足批处理文件中尾部功能的需求。它叫做“mtee”,而且是免费的。我已经将它合并到我正在处理的批处理文件中,它的工作非常好。只需确保将可执行文件放入 PATH 语句中的目录中即可。

                            这是链接:

                            mtee

                            【讨论】:

                              猜你喜欢
                              • 2018-01-11
                              • 2015-07-15
                              • 1970-01-01
                              • 2011-05-24
                              • 1970-01-01
                              • 2014-02-26
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多