ファイルのInoとれたー
golang ino
Published: 2015-10-27

ファイル変更検知をどうしようかなと思っていて、
常駐して変更を何かしら(DBなり)に通知するもよし、とか思ってました。

ファイルハッシュ(MD5なりその他諸々)を取ってそれで変更を確認するのもありかなと思ってましたが
流石に時間かかりすぎるのでどうしようかと思っていたところでした。

Golangやり始めてからいろんなことやって見てたけど、
結局常駐型となるとサービス登録とかいろいろあるのよね…。
WebだけならListenAndServeとかで常駐は可能なんだけど。
どのみちシェルから起動して常駐させるしかないのかなぁと思っていました。

で、何がしたかったかというとファイル変更をログにとってIRC-BOTに吐きたかった。
ただそれだけなのですw
とはいえ、IRC-BOTがファイルを監視出来るかというとそうとも限らないはずです。
ファイルサーバとIRC-BOTが起動してるサーバとが別、しかもファイル共有してないとかあれば。ね?

なので、もういっそいろいろ作ってみようと。
Golangの勉強がてらいろいろ出来るんじゃない?ということで以下を試してみました。

  • 常駐してファイルを監視
    • github.com/howeyc/fsnotify 使えば出来ます。
    • でもGolangはじめて間がないのにそんなガッツリ監視やっても、ダウンタイムとか平気? →すみませんでした
  • 定期的にCronで起動してファイル変更を検知
    • これならGolangで書いてても初心者な自分でも出来るよね
    • でも変更てどう検知するの?
      • ファイルハッシュ(MD5等)とる? →時間かかってやっぱり厳しい気がした
      • なんかファイルのID的なのないの? ないわけないでしょ? ←ここ

で、とりあえずInoが取れるところだけ作りました。
普段Bitbucket.org使ってる自分ですが、眠すぎたのかGithubに上げたのでそのまま。

たったこれだけでした。
さすがGolang…ますます覚えたくなってます。これでご飯食べられたら幸せだろうなぁ

FileInfo.Sys().(*syscall.Stat_t).Ino

サンプルソースですが、このままコピってもらって

$ go run go-get-ino-sample.go /path/to/directory_for_get_ino

これでMD5ハッシュとかチェックしなくてもファイルが特定出来るー
前述のとおり、IRC-BOTのためだけに考えてるので、いろいろ細かいお話はあるでしょうがその辺りは気にしないです。

あ、IRC-BOT出来たとかその辺りは、一通りBitbucketの方薦めてます。
なんで今回Gtihubにアップしたのか…w
叩かれても構わないし、どんとこーいということなんでしょうね!