我想查看子目录中有多少文件,以找出所有 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