ささやかな日々記

日々過ごす中で感じたことや培ったことが誰かの役に立てられたらと思うSEの雑記

PowerShell ファイル追記監視

今回はLinuxで使用されるtailコマンドを使ったファイル追記監視(tailコマンドオプションf)をwindowsで実現する方法です。

 

まずtailコマンドとはファイルの最終行から数行を表示するコマンドであり、
オプションfによって、ファイルの追記を監視するというものです。

たとえばログファイルの更新を監視するために事前にログファイルに対して
tailオプション-fを実行しておきます。

 

そしてログ更新が行われると自動的にCUI上に表示されているログに対して、
更新分が追記されていきます。
今回はこんなことをwindows上でできるコマンドを紹介します。

 

使用するコマンドはこんな感じです。

Get-Content .対象ファイル名 -wait -tail 行数

Get-Contentに対象ファイルを指定してあげて、[-wait]は追記を待ち合わせ、
[-tail 行数]は最終行含んだ行数を読み込むことを意味しております。

例として以下のような10行の「log.txt」で確認してみます。

PS C:\work> cat .\log.txt
1
2
3
4
5
6
7
8
9
10

これに対し以下のコマンドを実行。

PS C:\work> Get-Content .\log.txt -wait -tail 3
8
9
10

すると最終3行だけ表示されますがコマンドは終了せず、待機状態になります。
これでLinuxの[tail -f]を実行した状態と同じような状態になってます。

では、この状態のままエディタで「log.txt」に11行目を追記してみます。

PS C:\work> Get-Content .\log.txt -wait -tail 3
8
9
10
11

保存したタイミングで追記(ファイル内11行目、PowerShell内青字部分)がPowerShell上に表示されました。

ちなみにtailオプションが無い場合でも同じようにファイルの追記監視はできますが、
tailが無いとファイル内を全部読み込んで表示してから待機状態へと移行するため、
容量が大きいファイルですと時間がかかります。

 

また、waitオプション無しでtailオプションのみだと最終〇行を表示します。
それはそれで大容量のファイルがあって最終100行だけ見たいときなんかに使えると思います。

 

Linuxの[tail -f]と同じように使用する際にはどちらのオプションもつけてあげてください。

Get-Contentのエイリアスは[gc]なので短く書く場合にはこんな感じ。

PS C:\work> gc .\log.txt -wait -tail 1
11

※tailの行数を「0」にすると最終0行となり、即ファイル追記監視状態になります。