当我执行该命令时,两个命令给出了相同的输出。我为文件创建了一个软链接和一个硬链接,但两个命令仍然给出了相同的输出。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
→ (即,我们可以看到,它位于 中),因为已指定dir2
file2
dir2
two
于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
将找到纯文件和符号链接指向普通文件。 (此外,如果目录树包含任何指向目录的符号链接, 那些目录也会被搜索。)