質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

2回答

2241閲覧

rubyでファイルの更新を確認する方法

aws

総合スコア48

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2017/04/18 05:30

rubyでファイルの更新などの確認を行おうと考えているのですが、
"最後に開いた日"を把握する方法御座いませんでしょうか?

Mac os 10.12.3
ruby 2.2.5

fssm
https://github.com/ttilley/fssm
こちらを利用したのですが、変更日や作成日などでの把握出来たのですが、"最後に開いた日"を把握出来ませんでした。

require 'fssm' FSSM.monitor('.', '**/*') do update { |b, r| puts "Update in #{b} to #{r} " << Time.now.to_s } delete { |b, r| puts "Delete in #{b} to #{r} " << Time.now.to_s } create { |b, r| puts "Create in #{b} to #{r} " << Time.now.to_s } end

あるアプリのログを確認したいと考えておりlogファイルにデータが追加されるのでupdate(変更日)で取得出来ると考えていたのですが、ログが追加されても変更日は変わらず、"最後に開いた日"の日時が変わります。

fssm以外でも何か良い方法などあればご教授頂けると幸いです。

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

とりあえず、最終アクセス時刻と更新時刻はRuby標準機能だけで見ることができます。

irb(main):010:0> File.mtime('aaa') # 更新時刻 => 2017-04-19 16:13:34 +0900 irb(main):011:0> File.atime('aaa') # アクセス時刻 => 2017-04-19 16:13:34 +0900

ただこのような情報は結局OSから取ってくることになるので、そもそも取ってくることができるのか、あるいは取れてもそれが意味のある情報なのかについてはOSの仕様や設定などの環境次第です。無理な場合はどのようなライブラリ等を使ってもRuby(あるいは他のツール)からは取れないはずです。

正確には知らないのですが、取れない場合は上記のように確認しても常に nil が返るのではないかと思います。

そして私の環境の場合だとOSの設定で atime (アクセス時刻)は記録させてないので、上記例のように常に更新時刻と同じものが返ります(つまり「最終アクセス時刻」としては意味をなしません)。

投稿2017/04/19 07:49

編集2017/04/19 07:51
ksaga

総合スコア62

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

fssm は環境に応じたファイルシステム監視プログラムをバックエンドとして使用して機能を実現しており, 各バックエンド自体には, create/update/delete 以外のイベントも存在しているが, 抽象化のためにその 3 イベントに絞っているようです.

github.com/ttilley/fssm/blob/master/lib/fssm/support.rb

質問者さんの "ファイルを開いた" イベントとは, Linux 上で使用されるバックエンドである inotify が提供する IN_OPEN が該当すると思われます.

一方で, (質問者さんの環境の) MacOS のバックエンドである FSEvent には, inotify の IN_OPEN に相当するイベントは存在しないようです(参考).

もし対象のシステムを Linux 上で動かすのであれば, rb-inotify を利用して, IN_OPEN の監視を行うのはいかがでしょうか.

投稿2017/05/31 06:45

編集2017/05/31 06:49
zeroyonichikyu

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問