linux – 为什么我的find -type d对文件夹中的每个文件执行fstat?

前端之家收集整理的这篇文章主要介绍了linux – 为什么我的find -type d对文件夹中的每个文件执行fstat?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找. -type d在一个相当大的目录树上.我只对在这个树中找到目录感兴趣,但是当我对进程运行一个strace以确保它正在按照我的预期进行时,我注意到有大量的操作被浪费在运行fstat文件上在树内.
newfstatat(AT_FDCWD,"file1",{st_mode=S_IFREG|0600,st_size=7690,...},AT_SYMLINK_nofollow) = 0
newfstatat(AT_FDCWD,"file2",st_size=7696,"file3",st_size=7687,"file4",st_size=10455,AT_SYMLINK_nofollow) = 0

是不是意识到inode指向一个目录,直到它执行fstat?如果是这样的话,那将需要很长时间.其中一些目录可能包含数百万个项目,但我真的只关心目录.

最后,我想要一份关于文件树中每个目录的dirsize和路径的报告.对我来说,最快/最有效的方法是什么?

解决方法

是的,看起来确实是找到使用 fstat确定文件类型的情况.鉴于 dirent包含自内核2.6.4以来的信息,这是有点令人惊讶的.

并非所有文件系统都支持扩展的dirent行为,因此在您的情况下这是正确的,或者find不使用它.如果不知道您的文件系统类型,我们无法决定.

猜你在找的Linux相关文章