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

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

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

我可以使用 GUI 找到它,只需打开整个/文件夹的属性窗口,但如果知道如何使用命令行来执行此操作就更好了。

我是否需要一系列命令,还是只需要一个命令?

答案1

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

sudo find / -type f -printf '.' | wc -c
sudo find / -type d -printf '.' | wc -c

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

find / -xdev -type f -printf '.' | wc -c
find / -xdev -type d -printf '.' | wc -c
  • sudo find / -type f -printf '.':为每一个文件打印一个点/
  • sudo find / -type d -printf '.':为每个文件夹打印一个点/
  • wc -c:计算字符数。

下面是一个例子,说明如果不注意文件/文件夹名称中的换行符可能会破坏其他方法,例如find / -type f | wc -l如何使用find / -type f -printf '.' | wc -c实际上使其正确:

% ls
% touch "file
\`dquote> with newline"
% find . -type f | wc -l
2
% find . -type f -printf '.' | wc -c
1

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

答案2

一种方法是

sudo find / -type f | wc -l
sudo find / -type d | wc -l

(sudo 以防止访问错误)

f 代表文件,d 代表目录。

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

答案3

如果你真的想要全部的文件系统中的对象数量,用于df -i计算 inode 数量。您无法获得目录和普通文件之间的细分,但好处是它几乎可以立即运行。文件系统已经跟踪了已使用的 inode 总数。


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

另外,当然有一种简单的方法来列出所有“磁盘”挂载,而不必列出明确的文件系统类型,但我不确定具体是什么。

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

答案4

使用zsh

与常规文件一样root

files=( /**/*(.D) )

这会将所有常规文件(包括以 a 开头的文件)放入.数组中files,现在我们可以简单地计算数组元素的数量:

echo $#files

这将处理所有边缘情况,例如不寻常的文件名。

对于目录也类似:

dirs=( /**/*(/D) )
echo $#dirs

相关内容