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将计算单个文件/文件夹的两行,最终打印结果减一。
1种方法是
sudo find / -type f | wc -l
sudo find / -type d | wc -l
Run Code Online (Sandbox Code Playgroud)
(sudo 以防止访问错误)
f 用于文件,d 用于目录。
/proc/ 文件系统会出错,但我不考虑这些文件;)
如果您真的想要文件系统中的对象总数,请使用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计数非目录文件。(您不想排除符号链接,是吗?)