如何计算系统上的所有文件?

Edr*_*out 4 command-line bash

我需要查看整个系统上有多少文件。具体来说,我需要计算来自/(整个系统)的所有文件,并且我需要在最后得到一个数字。就像整个系统上有 10000 个文件一样。

我怎样才能做到这一点?我希望你能帮忙!

pLu*_*umo 15

用于查看使用的Inodedf -i数量->字段。IUsed

或者限制输出,例如:

df --output=source,target,iused
Run Code Online (Sandbox Code Playgroud)

find请注意,来自和的数字df -i不一定匹配:

  • df -i还计算目录
  • 链接到同一 inode(硬链接)的文件将仅计数一次
  • 一些未链接到任何目录供内部使用的特殊 inode 不计算在内。
  • df不会遍历到已安装的目录,例如/boot,或者如果您有单独的/home分区。通过find,您可以使用-xdevflag 来获得该行为。

检查U&L SE 上的这个答案

我预计结果会略小于 df -i 计数,因为一些文件系统(包括 ext4)有一些特殊的索引节点,这些索引节点未链接到任何内部使用的目录。

  • @bac0n [`df` 使用 `statvfs()` 系统调用并向文件系统询问当前空间统计信息](https://unix.stackexchange.com/questions/445764/how-does-df-know-how-无需遍历所有网络即可使用大量空间)。 (2认同)
  • `find` 和 `df -i` 可能由于另一个原因而无法匹配,因为 `find` 将遍历已安装的文件夹。为了避免这种情况,请使用“-xdev”,如“sudo find / -xdev ...” (2认同)
  • @PaddyLandau 关于“安装”部分的观点很好。`/` 是设备上的一个分区,但可以有更多分区,甚至可以互相挂载其他文件夹!也许OP应该根据Unix文件系统的安装方式重新制定,否则它可能是严格的“/”分区文件计数(因此带有/out安装的“/home”、“/boot”等。也许问题中的安装表会有所帮助也。 (2认同)

cho*_*oba 14

您可以使用find /列出所有文件。当 find 的输出被重定向时,它会将包含换行符的文件名输出为跨越多行,因此您不能只计算行数。不过,您可以为每个文件输出其他内容并计算字符数:

sudo find / -type f -printf 1 | wc -c
Run Code Online (Sandbox Code Playgroud)

如果没有sudo,您可能无法访问所有路径,因此无法计算所有文件。

  • 这将排除目录,它们也是文件。 (5认同)
  • `触摸$'a\nb'; 查找| od -tx1` 输出“2e 0a 2e 2f 61 0a 62 0a”,其中在“61”和“62”之间包含“0a”。由于答案中的代码确实将输出传递到管道,因此“wc”将获得该文件的两行。您还可以通过管道传输到“cat”来查看管道输出:“find | 猫`。 (4认同)
  • 计算索引节点可能也更快。 (2认同)