Как найти все символические ссылки в дереве каталогов?
Я пытаюсь найти все ссылки в дереве каталогов на мой сайт. Я знаю, что могу использовать find чтобы сделать это, но я не могу понять, как рекурсивно проверить каталоги.
Я пробовал эту команду:
find /var/www/ -type l
... а позже я обнаружил, что содержимое в /var/www являются символическими ссылками, поэтому я изменил команду на:
find -L /var/www/ -type l
это займет некоторое время, однако я не вижу никаких совпадений.
как мне получить это проверить подкаталоги?
5 ответов:
это будет рекурсивно траверс
/path/to/folderкаталог и список только символические ссылки:ls -lR /path/to/folder | grep ^lесли ваше намерение состоит в том, чтобы следовать символической ссылки, вы должны использовать
findкоманда, но вы должны включить-Lвариант; на самом делеfindman page говорит:-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это, вероятно, будет работать: я нашел в
findman page this diamond: если вы используете вы должны измените его на :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
одна команда, без труб
find . -type l -lsпростой и понятный...
расширяя этот ответ, вот еще пара символических ссылок, связанных
findкоманды:найти символические ссылки на конкретную целевую
find . -lname link_targetотметим, что
link_targetможет содержать подстановочные знаки.найти сломанные символические ссылки
find -L . -type l -lsThe
-Lпараметр предписываетfindследовать символическим ссылкам, если при сломанный.найти и заменить сломанные символические ссылки
find -L . -type l -delete -exec ln -s new_target {} \;еще найти примеры
больше
findпримеры можно найти здесь:https://hamwaves.com/find/
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]$
чтобы увидеть только сами символические ссылки, вы можете использовать
find -L /path/to/dir/ -xtype lв то время как если вы хотите увидеть также, какие файлы они нацелены, просто добавьте ls
find -L /path/to/dir/ -xtype l -exec ls -al {} \;
Это лучшее, что я нашел до сих пор-показывает вам символические ссылки в текущем каталоге, рекурсивно, но без их следования, отображается с полными путями и другой информацией:
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...
Comments