Ruby 在 linux 文件系统上索引文件的进程

Ruby process to index files on a linux filesystem

我正在开发一个小型照片共享 Rails 应用程序,它将从本地文件系统上的照片库中读取和显示照片。

为了避免每次用户加载页面时都扫描文件系统,我想设置一个每小时一次的 cron 作业来索引所有文件并将其存储在本地 MySQL table。

扫描本地文件系统和存储有关本地文件的元数据(例如大小、文件类型、修改日期等)的最佳方法是什么?有方便的基于 ruby 的库吗?我还希望能够 "watch" 文件系统了解自上次扫描以来文件何时消失,以便它们可以从我的 table 中删除。

谢谢!

您会想要查看 inotify

https://github.com/nex3/rb-inotify

你可以在一个文件或目录上设置一个watch(在Linux内核中注册一个回调),每当那个file/directory中有什么变化时,内核都会通知您会立即获得已更改内容的列表。

此处列出了常见事件:https://en.wikipedia.org/wiki/Inotify

您会注意到 IN_CREATE + IN_DELETE 是您要查找的事件。

旁注IN_CREATE 仅创建文件(它仍然是空的),您需要等到调用 IN_CLOSE_WRITE 才能知道数据已完成写入文件。