Find

“find -H”和“find -L”命令有什麼區別?

  • May 30, 2019

當我執行命令時,兩個命令都給出了相同的輸出。我為文件創建了一個軟連結和一個硬連結,但兩個命令仍然給出了相同的輸出。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,符號連結twodir2被跟隨(即,我們可以看到file2,在 中dir2),因為在**命令行two中指定。請注意,仍然報告為對象。 find dir1/three
  • 在 下-L,兩個符號連結都被跟隨。我們看到file2,因為跟隨two → dir2連結,我們看到file3,因為跟隨dir1/three → ../dir3連結。

如果您現在還不是很清楚,請嘗試執行find我的範例中的命令-ls(作為 default 的替代-print),並特別注意列出的方式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(and find -H . -type f) 只會找到普通文件。
  • find . "(" -type f -o -type l ")"將找到普通文件和(所有)符號連結。
  • find -L . -type f將找到指向普通文件的普通文件和符號連結。(此外,如果目錄樹包含指向目錄的任何符號連結, 也會搜尋這些目錄。)

引用自:https://unix.stackexchange.com/questions/307169