cw1*_*w16 0 find hard-link symlink
当我执行命令时,两个命令都给出了相同的输出。我为文件创建了一个软链接和一个硬链接,但两个命令仍然给出了相同的输出。有没有之间的差异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
Run Code Online (Sandbox Code Playgroud)
注意:
-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
Run Code Online (Sandbox Code Playgroud)
符号链接./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
将找到指向纯文件的纯文件和符号链接。(此外,如果目录树包含指向目录的任何符号链接,
也将搜索这些目录。)