当使用显示目录时ls -l
,它们的链接数(输出中的第二个字段)至少为两个:一个用于目录名称,一个用于目录。.
$ mkdir foo
$ ls -l
total 2
drwxr-xr-x 2 user wheel 512 4 oct 14:02 foo
始终假设2以上的链接数与该dir(..
链接)中的子目录数相对应是否安全?
当使用显示目录时ls -l
,它们的链接数(输出中的第二个字段)至少为两个:一个用于目录名称,一个用于目录。.
$ mkdir foo
$ ls -l
total 2
drwxr-xr-x 2 user wheel 512 4 oct 14:02 foo
始终假设2以上的链接数与该dir(..
链接)中的子目录数相对应是否安全?
Answers:
这是通常在UNIX系统诚然,链接到一个目录的数量是子目录的数目加2。然而,有这样的情况,这是不正确的:
某些unice允许硬链接到目录。然后将有2个以上的链接与子目录不对应。
在某些文件系统中,目录没有.
和的条目..
。在GNU发现手册中提到在讨论一些例子-noleaf
选项(禁用假设优化.
和..
存在于所有目录):“CD-ROM或MS-DOS文件系统或AFS卷装入点”
计算子目录数量的一种几乎可靠的方法(如果文件名包含换行符,它可能仍然会失败)是
$(($(LC_ALL=C ls -la /path/to/directory | grep '^d' | wc -l) - 2)
一种更可靠的方法是使用shell glob */
和.*/
; 像往常一样处理模式不匹配的情况有点麻烦(bash和zsh中可以打开该nullglob
选项的情况除外)。
您可以尝试:
ls -l |grep ^d | wc -l
-type d
,但是:1.这需要GNU查找;2.您需要减去1作为起始目录(或pass-mindepth 1
)。