是不是因为在用户空间中从文件名转换为 inode 编号很困难,而您无法从那里读取 inode?
答案1
GNU coreutils 的 du(1) 实现将在下一个版本 (>8.21) 中支持 --inodes 选项...我刚刚将补丁推送到上游 Git (http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=333dc83d)。 看http://lists.gnu.org/archive/html/coreutils/2013-07/msg00087.html
答案2
使用df
,不是du
!
du
代表“磁盘使用情况”。它df
代表“磁盘空闲”,将检查文件系统是否正确。包括 inode 使用情况和选项-i
!
否则,只需这样做:
find thedirectory -exec ls -di {} \;|awk '{print $1}'|sort|uniq|wc -c
或类似
答案3
这不会给出确切的答案 - 特别是它将目录条目等同于文件,因此重复计算硬链接,以及在文件/目录名称中存在换行符的问题 - 但对于大多数目的来说可能“足够好”:
find /data | awk -F/ '{s=""; for (i=2; i<NF;i++) {s = s"/"$i; print s}}' | sort | uniq -c | sort -n
按 inode(原文如此)计数排序。如果您想要传统的目录排序顺序:
find /data | awk -F/ '{s=""; for (i=2; i<NF;i++) {s = s"/"$i; print s}}' | sort | uniq -c | sort -k2
最常见的情况是,当驱动器的 inode 用完时,我需要这样的信息,并且我想知道它们被用在了哪里。为此,一些小的误差通常不是什么大问题。
如果您想要更准确的东西,应该可以使用“find -ls”并解析列表中的 inode 编号以消除重复。