杜-索引节点

杜-索引节点

我想查看子目录中有多少文件,以找出所有 inode 使用情况在系统上的位置。有点像我这样做是为了空间利用

du -sh /*

这将为我提供根目录之外的目录中使用的空间,但在这种情况下,我需要文件的数量,而不是大小。

答案1

find . -maxdepth 1 -type d | while read -r dir
do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done

感谢 Gilles 和 xenoterracide 的安全/兼容性修复。

第一部分:find . -maxdepth 1 -type d将返回当前工作目录中所有目录的列表。 (警告:-maxdepth是一个 GNU 扩展,可能不存在于非 GNU 版本中 find。)这通过管道传输到...

第二部分:(while read -r dir; do 如上所示while read -r dir(newline) do)开始一个while循环 - 只要进入的管道打开while(直到发送整个目录列表),该read命令就会将下一行放入变量 中dir。然后它继续...

第三部分:printf "%s:\t" "$dir"将打印字符串$dir (其中包含目录名称之一),后跟冒号和制表符(但不是换行符)。

第四部分:find "$dir" -type f列出目录中名称为 的所有文件的列表$dir。该列表发送至...

第五部分:wc -l计算发送到其标准输入的行数。

最后一部分:done简单地结束while循环。

这样我们就得到了当前目录下所有目录的列表。对于每个目录,我们都会生成其中所有文件的列表,以便我们可以使用wc -l.结果将如下所示:

./dir1: 234
./dir2: 11
./dir3: 2199
...

答案2

尝试一下find . -type f | wc -l,它会计算当前目录中的所有文件以及子目录中的所有文件。请注意,所有目录都不会算作文件,只有普通文件才算作文件。

答案3

以下是一些有用的列表命令的汇编(根据以前的用户代码重新散列):

列出文件夹及其文件数:

find -maxdepth 1 -type d | sort | while read -r dir; do n=$(find "$dir" -type f | wc -l); printf "%4d : %s\n" $n "$dir"; done

列出文件数非零的文件夹:

find -maxdepth 1 -type d | sort | while read -r dir; do n=$(find "$dir" -type f | wc -l); if [ $n -gt 0 ]; then printf "%4d : %s\n" $n "$dir"; fi; done

列出具有子文件夹计数的文件夹:

find -maxdepth 1 -type d | sort | while read -r dir; do n=$(find "$dir" -type d | wc -l); let n--; printf "%4d : %s\n" $n "$dir"; done

列出子文件夹计数非零的文件夹:

find -maxdepth 1 -type d | sort | while read -r dir; do n=$(find "$dir" -type d | wc -l); let n--; if [ $n -gt 0 ]; then printf "%4d : %s\n" $n "$dir"; fi; done

列出空文件夹:

find -maxdepth 1 -type d | sort | while read -r dir; do n=$(find "$dir" | wc -l); let n--; if [ $n -eq 0 ]; then printf "%4d : %s\n" $n "$dir"; fi; done

列出包含内容计数的非空文件夹:

find -maxdepth 1 -type d | sort | while read -r dir; do n=$(find "$dir" | wc -l); let n--; if [ $n -gt 0 ]; then printf "%4d : %s\n" $n "$dir"; fi; done

答案4

杜-索引节点

我不确定为什么没有人(包括我自己)知道:

du --inodes
--inodes
      list inode usage information instead of block usage

我很确定这可以解决OP的问题。我已经开始大量使用它来找出我的巨大驱动器中所有垃圾的位置(​​并将其卸载到旧磁盘)。

更多信息

如果您不想递归(这在其他情况下可能有用),请添加

-S, --separate-dirs

相关内容