2012-02-07 49 views
1

我有这样的:使用找到-L选项

mylink -> myfile 

当我这样做:

find -L . -name 'mylink' 

我得到:

./mylink 

我不明白为什么会这样,请参见手册页:

-L:遵循符号链接。当查找检查或打印文件信息时,使用的信息应从链接指向的文件的属性中获取,而不是从链接本身获取(除非它是一个broch-ken符号链接或者find无法检查文件该链接指向)。

基于上述我期待以下行为为我的示例情况:find开始搜索。它遇到mylink。由于-L实际上取消了它的引用并获得了指向文件'myfile'的名字。文件名称与模式“mylink”不匹配,并且没有任何内容被报告。发生了什么?

回答

1

的名称不是一个属性,它是包含它的目录的属性。

如果要匹配符号链接的内容,请使用-lname

+0

我不明白,名字不是文件的属性? – abc 2012-02-07 21:35:11

+1

目录由将名称映射到inode的目录条目组成,它们是文件本身。一个inode具有元数据(如大小,时间和权限),但没有内部名称。事实上,一个文件(inode)可能有很多名字 - 见硬链接。 – ephemient 2012-02-07 21:37:18

1

当链接到一个目录时,'以下链接'适用。

链接到一个文件只是一个文件本身,找到。没有-L到目录的链接也只是一个文件。

只有当添加-L,会发现递归到该文件的链接到的目录

+0

'-L'也会影响'stat'相关测试的含义,例如'-uid'。 – ephemient 2012-02-07 21:40:36

+0

@ephemient:好点,我没有检查'find'是否使用'lstat'而不是'stat'与-L – sehe 2012-02-07 21:41:17