Find
“find -H”和“find -L”命令有什麼區別?
當我執行命令時,兩個命令都給出了相同的輸出。我為文件創建了一個軟連結和一個硬連結,但兩個命令仍然給出了相同的輸出。
find -H
和有區別find -L
嗎?
find``-links
除非涉及到測試,否則不會專門處理硬連結。文件的符號連結也將被非常相似地處理。我會
find
向您閱讀手冊頁,但我假設您已經閱讀過它。手冊頁是用初學者難以理解的晦澀語言編寫的。一個例子可能會有所幫助。做這個:$ mkdir dir1 dir2 dir3 $ touch dir1/file1 dir2/file2 dir3/file3 $ ln -s dir2 two $ cd dir1 $ ln -s ../dir3 three $ cd .. $ ls -lR # I have deleted my user name from the below. .: total 1 drwxr-xr-x 1 0 Sep 4 13:08 dir1 drwxr-xr-x 1 0 Sep 4 13:08 dir2 drwxr-xr-x 1 0 Sep 4 13:08 dir3 lrwxrwxrwx 1 4 Sep 4 13:08 two -> dir2 ./dir1: total 1 -rw-r--r-- 1 0 Sep 4 13:08 file1 lrwxrwxrwx 1 7 Sep 4 13:08 three -> ../dir3 ./dir2: total 0 -rw-r--r-- 1 0 Sep 4 13:08 file2 ./dir3: total 0 -rw-r--r-- 1 0 Sep 4 13:08 file3 $ find dir1 two dir1 dir1/file1 dir1/three two $ find -P dir1 two # This is the default; i.e., same as the above. dir1 dir1/file1 dir1/three two $ find -H dir1 two dir1 dir1/file1 dir1/three two two/file2 $ find -L dir1 two dir1 dir1/file1 dir1/three dir1/three/file3 two two/file2
注意:
- 在預設行為(即
-P
行為)中,find
不遵循任何一個符號連結。two
(在頂級目錄中)並且dir1/three
簡單地報告為對象。- 在 下
-H
,符號連結two
→dir2
被跟隨(即,我們可以看到file2
,在 中dir2
),因為在**命令行two
中指定。請注意,仍然報告為對象。find
dir1/three
- 在 下
-L
,兩個符號連結都被跟隨。我們看到file2
,因為跟隨two
→dir2
連結,我們看到file3
,因為跟隨dir1/three
→../dir3
連結。如果您現在還不是很清楚,請嘗試執行
find
我的範例中的命令-ls
(作為 default 的替代two
和方式。three
您會注意到文件的符號連結 在不同選項下的報告方式也不同。這是另一個例子:
$ ln -s /bin/sh mysh $ find . -size +9 $ find -H . -size +9 $ find -L . -size +9 ./mysh
符號連結
./mysh
很小。它指向/bin/sh
,這是一個相當大的文件。-size
使用, 進行測試在(預設)和./mysh
下被視為小,但在 下被視為大,因為意味著“查看連結指向的文件”。-P``-H``-L``-L
還有一個例子:
find . -type f
(andfind -H . -type f
) 只會找到普通文件。find . "(" -type f -o -type l ")"
將找到普通文件和(所有)符號連結。find -L . -type f
將找到指向普通文件的普通文件和符號連結。(此外,如果目錄樹包含指向目錄的任何符號連結, 也會搜尋這些目錄。)