使用locate只能find包含string“foo”的目录

是不是可以使用locate命令来查找目录? 为了更改,我想search一个目录,并排除不是目录的任何结果,例如文件或符号链接到文件。

虽然没有必要,我希望解决scheme也可以返回符号链接到其他目录(但是,而不是文件)。

最后,我想排除foo中的目录,只有一个例外。 如果foo的一个子目录包含一个名为foo的子目录,我宁愿将它返回。

如果以下文件和目录存在…

 /home/foo/ /home/foo/foo.txt /home/foo/someotherdir/ /home/foo/someotherdir/food/ /food/ /var/www/foo -> /home/foo/ /var/www/food -> /home/food/index.html 

输出将只包含…

 /home/foo/ /home/foo/someotherdir/food/ /food/ /var/www/foo -> /home/foo/ 

提前致谢。

编辑:谢谢你的回应。 我非常慎重地为这个命令locate而不是find

也许一个棘手的小问题,但它来了:

 locate foo | xargs file -NF '|' |grep '| directory' | sed 's/| directory//g' 

find只读预备数据库而不是文件系统。

使用find

包含foo的目录

 find /path -name '*foo*' -type d 

包含foo的链接,您需要阅读链接并testing目标是否是需要脚本的目录

 #!/bin/bash f=$(readlink $1) if [ -d "$f" ] then echo $1 fi 

像这样使用它

 find /path -name '*foo*' -type l -exec script {} \; 
 locate foo | sed 's%/[^/]*$%/%' 

编辑:这只是在最后一个斜杠后捕获所有的信息。

这个会做这个工作:

 locate foo | grep "foo[^/]*/$" 

它会比find选项快得多,但标准的locate警告,它可能是过时的24小时。