Jes*_*sse 22 linux disk-space file-management filesystems du
我正在尝试清理多年来积累的各种垃圾的硬盘驱动器。du
有助于减少磁盘使用量,但整个事情仍然很笨拙,不是因为总大小,而是因为文件和目录的总数。
有没有办法我可以做一些类似du
但不计算文件大小的事情,而是计算文件和目录的数量?例如:一个文件是1,一个目录是它里面的文件/目录的递归数+1。
编辑:我应该更清楚。我想不仅知道的文件/目录总数/
,而且在/home
,/usr
等,并在其子目录,递归,如du
确实为大小。
krl*_*mlr 22
我发现它du --inodes
很有用,但我不确定du
它需要哪个版本。在 Ubuntu 17.10 上,以下工作:
du --inodes # all files and subdirectories
du --inodes -s # summary
du --inodes -d 2 # depth 2 at most
Run Code Online (Sandbox Code Playgroud)
结合使用| sort -nr
以按包含 inode 的数量降序排序。
Hen*_*nes 11
最简单的方法似乎是 find /path/to/search -ls | wc -l
Find 用于遍历所有文件和文件夹。
-ls
列出(打印)所有名称。这是默认设置,如果您不使用它,它仍然可以在几乎所有系统中正常工作。(几乎,因为有些可能有不同的默认值)。不过,明确使用它是一个好习惯。
如果您只使用该find /path/to/search -ls
部件,它会将所有文件和目录打印到您的屏幕上。
wc
是字数。该-l
选项告诉它计算行数。
您可以通过多种方式使用它,例如
第一个选项让 wc 打开一个文件并计算该文件中的行数、单词数和字符数。第二个选项执行相同的操作,但没有从标准输入读取的文件名。
您可以使用管道组合命令|
。第一个命令的输出将通过管道传输到第二个命令的输入。因此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 {} \;
将列出 / 中的所有目录,禁止一些您不想搜索的目录。我们可以对它们中的每一个触发上一个命令,在 / 中为每个文件夹生成文件总和。
然而:
小智 9
ncdu非常适合这个!
在手册页中,您还可以显示每个目录的计数以及按计数排序:
[...]
KEYS
C Order by number of items (press again for descending order)
[...]
c Toggle display of child item counts.
Run Code Online (Sandbox Code Playgroud)
例如:
下面的 PHP 脚本就可以解决这个问题。
#!/usr/bin/php
<?php
function do_scan($dir, $dev) {
$total = 1;
if (\filetype($dir) === 'dir' && \lstat($dir)['dev'] == $dev) {
foreach (\scandir($dir) as $file) {
if ($file !== '.' && $file !== '..') {
$total += do_scan($dir . \DIRECTORY_SEPARATOR . $file, $dev);
}
}
print "$total\t$dir\n";
}
return $total;
};
foreach (\array_slice($argv, 1) as $arg) {
do_scan($arg, \lstat($arg)['dev']);
}
Run Code Online (Sandbox Code Playgroud)
将其放入文件中(例如“ treesize
”),chmod +x
然后使用./treesize . | sort -rn | less
.
归档时间: |
|
查看次数: |
20317 次 |
最近记录: |