我可以使用`ls -l`确定目录中的子目录数量吗?

Eug*_*ash 8 filesystems hard-link

使用 显示目录时ls -l,它们的链接数(输出中的第二个字段)至少为两个:一个用于目录名称,一个用于.

$ mkdir foo
$ ls -l
total 2
drwxr-xr-x  2 user   wheel  512  4 oct 14:02 foo
Run Code Online (Sandbox Code Playgroud)

始终假设 2 以上的链接数与此目录(..链接)中的子目录数相对应是否安全?

Gil*_*il' 7

这是通常在UNIX系统诚然,链接到一个目录的数量是子目录的数目加2。然而,有这样的情况,这是不正确的:

  • 一些 unice 允许硬链接到目录。那么就会出现2个以上不对应子目录的链接。

  • 有些文件系统的目录没有.和 的条目..。在GNU发现手册中提到在讨论一些例子-noleaf选项(禁用假设优化...存在于所有目录):“CD-ROM或MS-DOS文件系统或AFS卷装入点”

计算子目录数量的一种几乎可靠的方法(如果文件名包含换行符,它仍然可能失败)是

$(($(LC_ALL=C ls -la /path/to/directory | grep '^d' | wc -l) - 2)
Run Code Online (Sandbox Code Playgroud)

更可靠的方法是使用 shell globs*/.*/; 像往常一样处理模式不匹配的情况有点痛苦(除了在 bash 和 zsh 中,您可以打开该nullglob选项)。