我正在尝试编写一个程序calcsize
,用于计算所有子目录的大小。我想创建结果的缓存,并且只有在自上次运行程序后它已经更改时才重新遍历目录。
类似的东西:
./calcsize
//outputs
/absolute/file/path1/ 1000 Bytes
/absolute/file/path2/ 2000 Bytes
我已经使用自己的walk实现走了dirs,因为内置的go filepath.Walk
已经在每个文件上调用Lstat
。
有没有办法知道某个目录或一组文件是否已更改而未在每个文件上调用Lstat
?也许是我不知道的系统调用?
答案 0 :(得分:1)
是否以及如何实现这一点在很大程度上取决于您的操作系统。但你可以看一下github.com/howeyc/fsnotify声称提供此功能(我从未使用过它 - 我刚刚通过谷歌发现它)。
一般情况下,请查看任何提供“观看”功能的Go程序。特征。我会想到GoConvey和GopherJS's serve mode作为示例,但还有其他人(甚至可能在标准库中)。
答案 1 :(得分:1)
一般来说,没有。但是,您可能需要查看:https://github.com/mattn/go-zglob/blob/master/fastwalk/fastwalk_unix.go
如果您只关心文件,那么使用该数据可以跳过一些静态调用。