“find -H”和“find -L”命令有什么区别?

“find -H”和“find -L”命令有什么区别?

当我执行该命令时,两个命令给出了相同的输出。我为文件创建了一个软链接和一个硬链接,但两个命令仍然给出了相同的输出。find -H和之间有区别吗find -L

答案1

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→ (即,我们可以看到,它位于 中),因为已指定dir2file2dir2two find 命令行。请注意,dir1/three仍将其报告为对象。
  • 在 下-L,两个符号链接都被跟随。我们可以看到file2,因为遵循了two → dir2链接,我们可以看到file3,因为遵循了dir1/three → 链接。../dir3

如果您现在还不太清楚,请尝试运行find我的示例中的命令-ls(作为默认的替代-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(和find -H . -type f)将仅查找纯文件。
  • find . "(" -type f -o -type l ")"将找到纯文件和(所有)符号链接。
  • find -L . -type f将找到纯文件和符号链接指向普通文件。 (此外,如果目录树包含任何指向目录的符号链接, 那些目录也会被搜索。)

相关内容