仅当文件自上次调用 os.Lstat 后发生更改时才调用 os.Lstat

Calling os.Lstat only if the file has changed since the last time I called os.Lstat

我正在尝试编写一个程序,calcsize,计算所有子目录的大小。我想创建一个结果缓存,并且只有在自上次我 运行 程序以来目录发生变化时才重新遍历目录。

类似于:

./calcsize
//outputs 
/absolute/file/path1/ 1000 Bytes
/absolute/file/path2/ 2000 Bytes

我已经在用自己的 walk 实现遍历目录,因为内置的 go filepath.Walk 已经在每个文件上调用 Lstat

有没有什么方法可以知道一个目录或一组文件是否已更改而无需对每个文件调用 Lstat?可能是我不知道的系统调用?

这是否可行以及如何实现在很大程度上取决于您的操作系统。但是您可以看看 github.com/howeyc/fsnotify,它声称提供此功能(我从未使用过它——我现在是通过 Google 找到的)。

一般来说,看看任何提供 'watch' 特性的 Go 程序。 GoConvey and GopherJS's serve mode 作为示例浮现在脑海中,但还有其他示例(甚至可能在标准库中)。

一般来说,不会。但是你可能想看看:https://github.com/mattn/go-zglob/blob/master/fastwalk/fastwalk_unix.go

如果您只关心文件,则可以使用该数据跳过一些统计调用。