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

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

我有一台服务器,通过网络共享用户主文件夹。每个用户都有一个缓存文件夹。有时使用符号链接将此文件夹重定向到他们正在使用的计算机的硬盘驱动器(有时这不起作用,并且他们的符号链接已损坏[这是另一天的问题]。)

我正在尝试找出哪些用户有符号链接,哪些用户没有。在共享文件夹中,要获取缓存文件夹,您可以替换文件夹,如下所示:

$GRADE/$USERNAME/图书馆/缓存

现在我正在搜索哪些用户有符号链接,哪些用户没有。我想出了:

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 中是否存在递归文件夹替换通配符格式,而我的 google-fu 让我失望了。

那么,我该如何正确地制定搜索?

答案1

Bash 4**shopt -s globstar

全球星
                      如果设置,文件名扩展中使用的模式 ** 将
                      文本将匹配一个文件和零个或多个目录,
                      子目录。如果模式后面跟着 /,则只有
                      目录和子目录匹配。

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

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

要查找损坏的符号链接:

find -L -type l

答案2

Dennis 确实让我走上了正确的道路。以下是我最终使用的方法:

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

它只搜索 3 个目录,查找 Library 文件夹(每个用户都有)。然后它会列出该文件夹中的 Caches 条目,并显示以下内容:

  • 如果文件夹存在,则显示该文件夹的列表(蓝色)
  • 如果符号链接存在,则显示该行(紫色)
  • (理论上)如果缓存文件夹不存在,则会出现错误

我试过:

sudo find . -depth 4 -name Caches -ls

这确实很接近我想要的效果。它没有任何颜色,也不会告诉我缓存文件夹是否完全丢失。

我也非常喜欢搜索损坏的符号链接,如下所示:

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

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

相关内容