如何计算系统上文件/文件夹的总数?

Tel*_*Why 7 filesystem command-line files search

如何使用命令行计算系统上存在的所有文件/文件夹的数量?

我可以使用 GUI 找到它,只需打开整个/文件夹的属性窗口,但如果知道如何使用命令行来完成它会很好。

我是否需要一整套命令,还是只需要一个命令?

kos*_*kos 11

由于文件/文件夹名称可以包含换行符:

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

这将计算当前目录中的任何文件/文件夹/。但正如穆鲁指出的那样,您可能希望从计数中排除虚拟/其他文件系统(以下内容将排除任何其他已安装的文件系统):

find / -xdev -type f -printf '.' | wc -c
find / -xdev -type d -printf '.' | wc -c
Run Code Online (Sandbox Code Playgroud)
  • sudo find / -type f -printf '.': 为每个文件打印一个点/
  • sudo find / -type d -printf '.':为中的每个文件夹打印一个点/
  • wc -c: 计​​算字符数。

这是一个示例,说明如何不处理文件/文件夹名称中的换行符可能会破坏其他方法,例如find / -type f | wc -l,以及 usingfind / -type f -printf '.' | wc -c实际如何使其正确:

% ls
% touch "file
\`dquote> with newline"
% find . -type f | wc -l
2
% find . -type f -printf '.' | wc -c
1
Run Code Online (Sandbox Code Playgroud)

如果 STDOUT 不是终端,find将逐字打印每个文件/文件夹名称;这意味着包含换行符的文件/文件夹名称将打印在两行不同的行中,这wc -l将计算单个文件/文件夹的两行,最终打印结果减一。

  • @DevRobot *nix 系统中的文件/文件夹可以包含换行符;这确实是一个边缘情况,但它可能发生。尝试输入 `touch "file`,按回车键,输入 `with newline"` 并再次按回车键。这将创建一个包含换行符的文件。然后尝试运行`ls | wc -l`,`查找。- 类型 f | wc -l` 或其他;您会看到文件数不匹配,因为换行符创建了额外的输出行,使该单个文件实际上被计算了两次。 (5认同)
  • 你应该使用`-xdev`,或者至少排除`/proc`、`/sys`,可能还有`/dev`。 (3认同)

Rin*_*ind 7

1种方法是

sudo find / -type f | wc -l
sudo find / -type d | wc -l
Run Code Online (Sandbox Code Playgroud)

(sudo 以防止访问错误)

f 用于文件,d 用于目录。

/proc/ 文件系统会出错,但我不考虑这些文件;)


Pet*_*des 6

如果您真的想要文件系统中的对象总数,请使用df -i来计算 inode 数。您不会得到目录和普通文件之间的细分,但从好的方面来说,它几乎可以立即运行。已使用的 inode 总数是文件系统已经跟踪的内容。


如果您想使用find基于 - 的建议之一,请不要只在/. 用于find -xdev由类似之类的findmnt --list -v -U -t xfs,ext3,ext4,btrfs,vfat,ntfs -o TARGET东西生成的挂载点列表。但是,这并不排除绑定安装,因此绑定安装下的文件将被计算两次。 findmnt 很酷。

此外,当然有一种直接的方法可以列出所有“磁盘”安装,而无需列出显式文件系统类型,但我不确定到底是什么。

正如另一个答案所建议的那样,用于find -printf . | wc -c避免在计算文件名中的有趣字符时出现任何可能的问题。使用-not -type d计数非目录文件。(您不想排除符号链接,是吗?)

  • 这是比建议遍历整个文件系统的所有其他答案更好的方法。另一个可以使用的命令行工具是 `stat`。使用 `stat -f /` 或 `df -i /` 都会使用 `statfs` 系统调用获取数据,因此这两个命令的输出应该始终保持一致。 (2认同)