2012/02/23

ファイルの変更監視を Series で

特定のディレクトリの下のファイル変更を監視したくて書いてみた。

;; /tmp の下をファイルの変更を 3 回だけ検知する。
(collect-ignore
(subseries (format t "~&~a !!!!!!!!!!!!" (scan-file-change "/tmp/*.*"))
0 3))

こんなふうに色々と scan-xxx にするとおもしろいかもしれない。

(defun collect-file-write-date-map (path)
(let ((file (scan-directory path)))
(collect-map file (file-write-date file))))

(series::defS scan-file-change (path &key (interval 1))
"(scan-file-change path [:interval 1])"
(series::fragl
;; args
((path) (interval))
;; rets
((file t))
;; aux
((map fset:map)
(file t)
(new-wirte-date t)
(old-write-date t)
(files t))
;; alt
()
;; prolog
((setq map (collect-file-write-date-map path))
(sleep interval)
(setq files (generator (scan-directory path))))
;; body
(L
(setq file (next-in files
(sleep interval)
(setq files (generator (scan-directory path)))
(next-in files)))
(setq old-write-date (fset:@ map file))
(setq new-wirte-date (file-write-date file))
(if (and old-write-date (= old-write-date new-wirte-date))
(go L)
(setq map (fset:with map file new-wirte-date))))
;; epilog
()
;; wraprs
()
;; impure
nil))

https://github.com/quek/info.read-eval-print.series-ext

0 件のコメント: