Windows で Tail -f をやりたい

Windows には tail コマンドがない。ログファイルを確認する時に tail -f が重宝するのだが…。

というわけで、Windows 上で tail コマンドを使うための方法を紹介する。

msys・Git For Windows を入れれば入っている

いわゆる GitBash である。Git For Windows など、msys 系のツールや Cygwin を入れれば Tail コマンドが入っている。

Windows Server 2003 Resource Kit Tools に入っている純正品を使う

以下よりリソースキットをダウンロードする。この中にある tail.exe が Windows 純正。

適当なところにインストールすると、tail.exe が見つかるはず。これを PATH が通っているところに置いておく。といっても、インストーラが解凍したときに環境変数 PATH に解凍先のフォルダパスを勝手に追加してくれるので、そのままで良い人はそのまま使える。PATH を変えられたくない場合はインストール後に修正する。

Windows バッチで再現

以下で紹介されているバッチスクリプトを使えば、入力ファイルが出力オープンな状態の間だけ監視を続けてくれる。アプリケーションが常に追記しているログファイルなどであれば出力オープンなままなので、実質的に tail -f だ。

PowerShell 3.0 以降で再現

Windows 8 以降で使える PowerShell 3.0 なら、以下のように Get-Content コマンドで再現可能。

Get-Content -Path Sample.log -Tail 10 -Wait

PowerShell のバージョンを確認するには以下のとおり。当方 Windows 10 なので PSVersion は 5.0 らしい。

PS > $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.0.10586.494
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10586.494
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Get-Content コマンドは以下のように cat エイリアスが定義されているので、cat と打っても使える。

PS > Get-Alias | Where-Object {$_.Definition -match "Get-Content"}
# Gal | ?{$_.Definition -match "Get-Content"}

CommandType     Name
-----------     ----
Alias           cat -> Get-Content
Alias           gc -> Get-Content
Alias           type -> Get-Content

JScript で作成する

同じコマンドでも実装のされ方が違うのは面白い。

Tail For Windows を使う

フリーソフトを使う。

以上

自分は GitBash をメインに使っているが、Windows 純正 tail.exe も入れておいてある。これでおけ~。