列出特定相对目录中的符号链接

我有一个通过networking共享用户主文件夹的服务器。 每个用户都有一个Cache文件夹。 有时候使用符号链接将这个文件夹redirect到他们正在使用的任何一台机器的硬盘驱动器上(有时候这种方式不起作用,而且他们的符号链接(这是另一天的事情)。

我试图找出哪些用户有符号链接,哪些不符合。 在共享文件夹中,要访问Cache文件夹,您可以用如下replace文件夹:

$ GRADE / $ USERNAME /图书馆/caching

现在我正在查找哪些用户有符号链接,哪些不符合。 我已经想出了:

cd /path/to/shared/home/folders sudo find . -name "Caches" -exec ls -ld {} \; 

并得到这样的结果:

 lrwxr-xr-x@ 1 name0 ES_Students 27 Jan 18 11:05 ./CES_Grade_03/name0/Library/Caches -> /tmp/name0/Library/Caches drwx------ 11 name1 ES_Students 374 Dec 8 15:44 ./CES_Grade_03/name1/Library/Caches lrwxr-xr-x@ 1 name2 ES_Students 27 Feb 23 14:27 ./CES_Grade_03/name2/Library/Caches -> /tmp/name2/Library/Caches drwx------ 17 name3 ES_Students 578 Jan 25 11:13 ./CES_Grade_03/name3/Library/Caches drwx------ 12 name4 ES_Students 408 Mar 22 13:09 ./CES_Grade_03/name4/Library/Caches 

但是我觉得必须有更好的办法。 是的,这已经够好了,而且是一次性的任务,但是我想知道如何做到这一点! 当然,我应该能够做到这样的事情:

 cd /path/to/shared/home/folders sudo ls -ld **/**/Library/Caches 

恐怕我不知道正确的语法,或者如果在bash中有一个recursion的文件夹replace通配符格式,并且我的google-fu失败了。

那么,我如何正确地制定search?

Bash 4有**如果你shopt -s globstar

 globstar
                      如果设置,文件扩展名中使用的模式**
                      文本将匹配一个文件和零个或多个目录和
                      子目录。 如果模式后面跟着一个“/”,
                      目录和子目录相匹配。

查找符号链接到文件(而不是目录)的文件:

 find -maxdepth 1 -xtype f -type l -ls 

要find错误的符号链接:

 find -L -type l 

丹尼斯肯定让我走上正轨。 这是我最终使用的:

 sudo find . -depth 3 -name Library -exec ls -ldGF {}/Caches \; 

它只search3个深度的目录,查找Library文件夹(每个用户都有)。 然后它会列出该文件夹中的Caches条目,并给我:

  • 如果存在文件夹的列表(蓝色)
  • 显示符号链接(如果存在的话)(紫色)
  • (理论上)一个错误,如果根本不存在caching文件夹

我试过了:

 sudo find . -depth 4 -name Caches -ls 

它真的接近我想要的。 它没有任何着色,并且不会告诉我caching文件夹是否完全丢失。

我也非常喜欢search符号链接,如下所示:

 sudo find -L . -depth 4 -type l -ls 

我想这个故事的寓意是,我应该花更多的时间浏览find手册页。