xen*_*ide 65 disk-usage recursive inode
我想查看子目录中有多少文件,以找出所有 inode 使用情况在系统上的位置。有点像我会为了空间使用而这样做
du -sh /*
Run Code Online (Sandbox Code Playgroud)
这将为我提供根目录中使用的空间,但在这种情况下,我想要文件数,而不是大小。
Sha*_*off 81
find . -maxdepth 1 -type d | while read -r dir
do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
Run Code Online (Sandbox Code Playgroud)
感谢 Gilles 和 xenoterracide 的安全/兼容性修复。
第一部分:find . -maxdepth 1 -type d将返回当前工作目录中所有目录的列表。(警告:-maxdepth是 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
...
Run Code Online (Sandbox Code Playgroud)
Cry*_*vok 14
尝试:
find /path/to/start/at -type f -print | wc -l
Run Code Online (Sandbox Code Playgroud)
作为起点,或者如果您真的只想递归遍历目录的子目录(并跳过该顶级目录中的文件)
find `find /path/to/start/at -mindepth 1 -maxdepth 1 -type d -print` -type f -print | wc -l
Run Code Online (Sandbox Code Playgroud)
小智 13
这是一些有用的列表命令的汇编(根据以前的用户代码重新散列):
列出带有文件数的文件夹:
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
Run Code Online (Sandbox Code Playgroud)
列出文件数非零的文件夹:
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
Run Code Online (Sandbox Code Playgroud)
列出带有子文件夹计数的文件夹:
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
Run Code Online (Sandbox Code Playgroud)
列出具有非零子文件夹计数的文件夹:
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
Run Code Online (Sandbox Code Playgroud)
列出空文件夹:
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
Run Code Online (Sandbox Code Playgroud)
列出具有内容计数的非空文件夹:
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
Run Code Online (Sandbox Code Playgroud)
Sri*_*bat 11
我不确定为什么没有人(包括我自己)知道:
du --inodes
Run Code Online (Sandbox Code Playgroud)
--inodes
list inode usage information instead of block usage
Run Code Online (Sandbox Code Playgroud)
我很确定这可以解决OP的问题。我已经开始大量使用它来找出我的巨大驱动器中所有垃圾的位置(并将其卸载到旧磁盘)。
如果您不想递归(这在其他情况下可能有用),请添加
-S, --separate-dirs
Run Code Online (Sandbox Code Playgroud)