Как найти все символические ссылки в дереве каталогов?
Я пытаюсь найти все символические ссылки в дереве каталогов для моего сайта. Я знаю, что для этого могу использовать find
, но я не могу понять, как рекурсивно проверять каталоги.
Я пробовал эту команду:
find /var/www/ -type l
& hellip; и позже я обнаружил, что содержимое в /var/www
является символическими ссылками, поэтому я изменил команду на:
find -L /var/www/ -type l
потребуется некоторое время, но я не получаю совпадений.
Как мне получить это, чтобы проверять подкаталоги?
Ответы
Ответ 1
Это будет рекурсивно проходить через каталог /path/to/folder
и отображать только символические ссылки:
ls -lR /path/to/folder | grep ^l
Если вы намерены также следовать символическим ссылкам, вы должны использовать команду find
, но вы должны включить опцию -L
; на самом деле страница find
говорит:
-L Follow symbolic links. When find examines or prints information
about files, the information used shall be taken from the prop‐
erties of the file to which the link points, not from the link
itself (unless it is a broken symbolic link or find is unable to
examine the file to which the link points). Use of this option
implies -noleaf. If you later use the -P option, -noleaf will
still be in effect. If -L is in effect and find discovers a
symbolic link to a subdirectory during its search, the subdirec‐
tory pointed to by the symbolic link will be searched.
When the -L option is in effect, the -type predicate will always
match against the type of the file that a symbolic link points
to rather than the link itself (unless the symbolic link is bro‐
ken). Using -L causes the -lname and -ilname predicates always
to return false.
Затем попробуйте следующее:
find -L /var/www/ -type l
Это, вероятно, будет работать: я нашел в man-странице find
этот бриллиант: если вы используете параметр -type
, вы должны изменить его на параметр -xtype
:
l symbolic link; this is never true if the -L option or the
-follow option is in effect, unless the symbolic link is
broken. If you want to search for symbolic links when -L
is in effect, use -xtype.
Тогда:
find -L /var/www/ -xtype l
Ответ 2
Одна команда, без труб
find . -type l -ls
find
из текущего каталога .
далее все ссылки на -type l
ink и перечислите -ls
те, которые подробно.
Легко и просто...
В продолжение этого ответа приведем еще пару команд find
связанных с символическими ссылками:
Найти символические ссылки на конкретную цель
find . -lname link_target
Обратите внимание, что link_target
- это шаблон, который может содержать символы подстановки.
Найти неработающие символические ссылки
find -L . -type l -ls
Опция -L
инструктирует find
следовать по символическим ссылкам, если только они не -L
.
Найти и заменить неработающие символические ссылки
find -L . -type l -delete -exec ln -s new_target {} \;
Больше найти примеры
Другие примеры find
можно найти здесь: https://hamwaves.com/find/
Ответ 3
find
уже выглядит рекурсивно по умолчанию:
[15:21:53 ~]$ mkdir foo
[15:22:28 ~]$ cd foo
[15:22:31 ~/foo]$ mkdir bar
[15:22:35 ~/foo]$ cd bar
[15:22:36 ~/foo/bar]$ ln -s ../foo abc
[15:22:40 ~/foo/bar]$ cd ..
[15:22:47 ~/foo]$ ln -s foo abc
[15:22:52 ~/foo]$ find ./ -type l
.//abc
.//bar/abc
[15:22:57 ~/foo]$
Ответ 4
Чтобы увидеть только символические ссылки, вы можете использовать
find -L /path/to/dir/ -xtype l
а если вы хотите увидеть, к каким файлам они нацелены, просто добавьте ls
find -L /path/to/dir/ -xtype l -exec ls -al {} \;
Ответ 5
Это лучшее, что я нашел до сих пор, - показывает вам символические ссылки в текущем каталоге, рекурсивно, но не следуя им, отображается с полными путями и другой информацией:
find ./ -type l -print0 | xargs -0 ls -plah
Вывод выглядит примерно так:
lrwxrwxrwx 1 apache develop 99 Dec 5 12:49 ./dir/dir2/symlink1 -> /dir3/symlinkTarget
lrwxrwxrwx 1 apache develop 81 Jan 10 14:02 ./dir1/dir2/dir4/symlink2 -> /dir5/whatever/symlink2Target
etc...
Ответ 6
Что я делаю, так это создаю скрипт в каталоге bin, похожий на псевдоним. Например, у меня есть скрипт с именем lsd ls -l | grep ^ d
Вы могли бы сделать один lsl ls -l R | grep ^ l
Просто chmod их +x, и вы готовы идти.