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
в конце
(как альтернативой стандартному -принту
)
и обратите особое внимание на способы перечисления два
и три
.
Вы заметите, что символические ссылки на файлы
также отображаются по-разному в разных параметрах.
Вот еще один пример:
$ ln -s /bin/sh mysh
$ find . -size +9
$ find -H . -size +9
$ find -L . -size +9
./mysh
Символьная ссылка ./ mysh
мала.
Он указывает на / bin / sh
, это довольно большой файл.
Тестирование с размером
,
./ mysh
рассматривается как маленький в параметрах -P
(по умолчанию) и -H
,
, но считается большим в разделе -L
,
потому что -L
означает «посмотреть файл, на который указывает ссылка».
Еще один пример:
найти. -type f
(и find -H. -type f
) найдет только простые файлы. находка. "(" -type f -o -type l ")"
найдет простые файлы
и (все) символьные ссылки. найти -L. -type f
найдет простые файлы
и символические ссылки , которые указывают на простые файлы .
(Кроме того, если дерево каталогов содержит какие-либо символические ссылки на каталоги,
эти каталоги также будут найдены.)