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中的ARP防火墙主要用于防御ARP欺骗攻击,其效果取决于多...
insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...