我正在尝试清理多年来积累了各种垃圾的硬盘。du
虽然它有助于减少磁盘使用量,但整个系统仍然难以处理,这并不是因为总大小,而是因为文件和目录的总数太多。
有没有办法可以做类似的事情du
,但不计算文件大小,而是计算文件和目录的数量?例如:文件为 1,目录为其中文件/目录的递归数量 + 1。
编辑:我应该说得更清楚一点。我不仅想知道 中的文件/目录总数/
,还想知道 等中的/home
文件/目录总数/usr
以及它们的子目录中的文件/目录总数,就像du
对大小所做的那样。
答案1
我发现du --inodes
它很有用,但我不确定du
它需要哪个版本。在 Ubuntu 17.10 上,以下内容有效:
du --inodes # all files and subdirectories
du --inodes -s # summary
du --inodes -d 2 # depth 2 at most
结合并按| sort -nr
包含的 inode 数量降序排序。
答案2
最简单的方法似乎是find /path/to/search -ls | wc -l
Find 用于遍历所有文件和文件夹。
-ls
列出(打印)所有名称。这是默认设置,如果您省略它,它仍然可以在几乎所有系统中正常工作。(几乎,因为有些可能有不同的默认值)。不过,明确使用它是个好习惯。
如果您只使用该find /path/to/search -ls
部分,它会将所有文件和目录打印到您的屏幕上。
wc
是字数统计。该-l
选项告诉它计算行数。
你可以通过多种方式使用它,例如
- wc 测试文件
- cat 测试文件 | wc
第一个选项让 wc 打开一个文件并计算该文件中的行数、单词数和字符数。第二个选项执行相同操作,但没有文件名,它会从 stdin 读取。
您可以使用管道将命令组合起来|
。第一个命令的输出将通过管道传输到第二个命令的输入。因此find /path/to/search -ls | wc -l
使用 find 列出所有文件和目录并将输出提供给 wc。然后 Wc 计算行数。
(另一个选择是“ls | wc”,但 find 更加灵活,并且是一种值得学习的好工具。)
[评论后编辑]
将 find 和 exec 结合起来可能会很有用。
例如,find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \;
将列出 / 中的所有目录,删除一些您不想搜索的目录。我们可以在每个目录上触发上一个命令,从而得出 / 中每个文件夹的文件总数。
然而:
- 这使用了 GNU 特定扩展 -maxdepth。
它可以在 Linux 上运行,但不能在任何类似 unix 上运行。 - 我怀疑您可能实际上想要每个子目录的多个文件。
答案3
北卡罗莱纳大学非常适合这个!
从手册页中,您可以显示每个目录的计数并按计数排序:
[...]
KEYS
C Order by number of items (press again for descending order)
[...]
c Toggle display of child item counts.
例如:
答案4
利用目录和文件之间用 分隔的事实/
。此脚本无法满足您的标准,但可以启发完整的解决方案。您还应该考虑使用locate索引您的文件。
geee: /R/tb/tmp
$ find 2>/dev/null | awk -F/ -f filez | sort -n
files: 57
3 imagemagick
7 portage
10 colemak-1.0
25 minpro.com
42 monolith
80 QuadTree
117 themh
139 skyrim.stings
185 security-howto
292 ~t
329 skyrim
545 HISTORY
705 minpro.com-original
1499 transmission-2.77
23539 ugent-settings
>
$ cat filez
{
a[$2]++; # $1= folder, $2 = everything inside folder.
}
END {
for (i in a) {
if (a[i]==1) {files++;}
else { printf "%d\t%s\n", a[i], i; }
}
print "files:\t" files
}
>
$ time locate / | awk -F/ -f /R/tb/tmp/filez | sort -n
files: 13
2
2 .fluxbox
10 M
11 BIN
120 bin
216 sbin
234 boot
374 R
854 dev
1351 lib
2018 etc
9274 media
30321 opt
56516 home
93625 var
222821 usr
351367 mnt
time: Real 0m17.4s User 0m4.1s System 0m3.1s