是否可以使用该locate
命令仅查找目录?换句话说,我想搜索目录,并排除任何非目录的结果,例如文件或文件的符号链接。
虽然没有必要,但我希望解决方案也能返回到其他目录(但同样不是文件)的符号链接。
最后,我想排除 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
。
答案1
可能有点棘手,但事实就是如此:
locate foo | xargs file -NF '|' |grep '| directory' | sed 's/| directory//g'
答案2
Locate 仅读取预先准备好的数据库而不是文件系统。
使用 find
包含 foo 的目录
find /path -name '*foo*' -type d
包含 foo 的链接,您需要读取该链接并测试目标是否是需要脚本的目录
#!/bin/bash
f=$(readlink $1)
if [ -d "$f" ]
then
echo $1
fi
像这样使用
find /path -name '*foo*' -type l -exec script {} \;
答案3
locate foo | sed 's%/[^/]*$%/%'
编辑:这只是将最后一个斜线后的所有信息都删除。
答案4
这个可以完成这个工作:
locate foo | grep "foo[^/]*/$"
它将比其他可用选项快得多,find
但标准locate
警告是它可能会过期 24 小时。