如何find目录树中的所有符号链接?
我试图find我的网站目录树中的所有符号链接。 我知道我可以使用find
来做到这一点,但我不知道如何recursion检查目录。
我试过这个命令:
find /var/www/ -type l
…后来我发现/var/www
中的内容是符号链接,所以我将命令更改为:
find -L /var/www/ -type l
运行需要一段时间,但是我没有find匹配。
我如何得到这个来检查子目录?
这将recursion地遍历/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
这可能会起作用:我在find
手册页中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
一个命令,没有pipe道:
find . -type l -ls
干净利落…
扩展这个答案,这里有几个符号链接相关的find
命令:
find特定目标的符号链接
find . -lname link_target
请注意, link_target
可能包含通配符。
find破碎的符号链接
find -L . -type l -ls
-L
选项指示find
遵循符号链接,除非被破坏。
查找并replace破碎的符号链接
find -L . -type l -delete -exec ln -s new_target {} \;
更多查找示例
更多的find
例子可以在这里find: http : //hamwaves.com/find/
find
已经看起来recursion默认情况下:
[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]$
这是迄今为止我发现的最好的东西 – 以recursion方式向您显示当前目录中的符号链接,但没有按照它们显示完整path和其他信息:
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...
要只看符号链接本身,可以使用
find -L /path/to/dir/ -xtype l
而如果你想看到他们的目标文件,只需要追加一个ls
find -L /path/to/dir/ -xtype l -exec ls -al {} \;