我有一个通过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条目,并给我:
我试过了:
sudo find . -depth 4 -name Caches -ls
它真的接近我想要的。 它没有任何着色,并且不会告诉我caching文件夹是否完全丢失。
我也非常喜欢search符号链接,如下所示:
sudo find -L . -depth 4 -type l -ls
我想这个故事的寓意是,我应该花更多的时间浏览find手册页。