2012-02-07 51 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