仅在自上次调用os.Lstat后文件已更改时调用os.Lstat

时间:2017-12-09 04:33:05

标签: go system-calls

我正在尝试编写一个程序calcsize,用于计算所有子目录的大小。我想创建结果的缓存,并且只有在自上次运行程序后它已经更改时才重新遍历目录。

类似的东西:

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

我已经使用自己的walk实现走了dirs,因为内置的go filepath.Walk已经在每个文件上调用Lstat

有没有办法知道某个目录或一组文件是否已更改而未在每个文件上调用Lstat?也许是我不知道的系统调用?

2 个答案:

答案 0 :(得分:1)

是否以及如何实现这一点在很大程度上取决于您的操作系统。但你可以看一下github.com/howeyc/fsnotify声称提供此功能(我从未使用过它 - 我刚刚通过谷歌发现它)。

一般情况下,请查看任何提供“观看”功能的Go程序。特征。我会想到GoConveyGopherJS's serve mode作为示例,但还有其他人(甚至可能在标准库中)。

答案 1 :(得分:1)

一般来说,没有。但是,您可能需要查看:https://github.com/mattn/go-zglob/blob/master/fastwalk/fastwalk_unix.go

如果您只关心文件,那么使用该数据可以跳过一些静态调用。

相关问题