前回Linuxのinotifywaitのことを書いたので、今回はWindows版。ブログをさくさく書いていて、「実はお暇」なのではと言われたりするが、ほとんどが過去のメモを書き直しているだけ。なので完全に余計なお世話だなぁwそういうことを言う人限ってアウトプットがほとんどないんだが。まぁ、暇といえば、今年はでっかく暇をとる予定。未だにオカンを偲ぶことが全くできないので、先が見えれば、少なくとも2、3ヶ月はお暇が欲しい。
閑話休題
.NET の FileSystemWatcher クラスを使えば、Windowsでもフォルダ監視ができる。特段、何も必要はない。
https://learn.microsoft.com/ja-jp/dotnet/api/system.io.filesystemwatcher?view=net-8.0
世の中にPowerShellスクリプトが転がっている。
ここでは、Windowsでinotifywaitを作って、使ってみる。FileSystemWatcherを利用しているので世の中のPowerShellとできることの違いはない。単にLinux版とコマンドラインオプションが同じなだけ。
inotifywaitのコンパイルにCygwinが必要だと言われているが、実はいらないらしい。.Net Framework 4.xが入っていれば簡単にできる。
ちなみに、以下がデフォルトでインストールされている、あるいは、インストールされている、.Net Framework のバージョン一覧。
https://learn.microsoft.com/ja-jp/dotnet/framework/migration-guide/versions-and-dependencies
必要な環境
Windows x64環境に.Net Framework 4.xが入っていること
https://dotnet.microsoft.com/ja-jp/download/dotnet-framework
.Net Framework 4のインストール確認
dir c:\Windows\Microsoft.NET\Framework64
ここでは、Windows Server 2022を利用(デフォルトで.net framework 4.8がインストールされている。)
必要なファイル
https://github.com/thekid/inotify-win から https://github.com/thekid/inotify-win/archive/refs/heads/master.zip を落としておく
ZIPファイルを解凍したら、そのディレクトリに移動する。
コンパイル
以下を実行。すぐ終わる。
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /t:exe /out:inotifywait.exe src\*.cs
inotifywait.exeがカレントディレクトリに生成されているはず。
利用方法
以下に書いてあって、Linuxのinotifywaitとだいたい同じ。
https://github.com/thekid/inotify-win?tab=readme-ov-file#usage
ただし、以下の違いに注意
- 検知できるイベントが、create, modify, delete, moveで、FileSystemWatcherのデータなのでLinuxよりだいぶ少ない。
- デーモン起動やファイル出力ができない。
実行例
inotifywait --monitor --recursive --format "%T %w %f %e" C:\Windows\Temp
まぁ、使い方がLinuxと同じなのと、監視先がコマンドラインで指定できるので便利