使用定位查找目录


20

我一直使用locate查找我知道名字的文件,locate非常快,我很喜欢。对于最近创建的文件,查找很棒,通常对于最近创建的文件,我知道它们的创建位置,因此我不必搜索整个文件系统。

当我忘记了目录的位置时,找不到或定位都不理想。

由于目录中的每个文件也都适合查找,因此“查找”总是吐出太多的信息。例如,如果我正在文件系统上某处搜索名为log的目录,则定位日志将返回大量结果。如果我对find执行相同的操作,则find / -name log -type d find会花几分钟的时间运行,并且每次遇到无法读取的文件夹时都会吐出各种权限错误。

有没有更好的办法?

答:所以我坚持使用grep,直到找到其他东西为止:

locatedir () {
    for last; do true; done
    if [[ $last == *\/* ]]
    then
        locate $@ | grep "${last}\$"
    else
        locate $@ | grep "/${last}\$"
    fi
}

Answers:


12

一种方法(我怀疑可能有更好的方法)是使用grep仅返回以您的文件夹名称结尾的那些路径:

locate foldername | grep /foldername$

28

您可以使用的选项--regex-rlocate

locate -r '/log$'

是(+1)。locate有自己内置的正则表达式capablility: -r--regex...为全方位的选择看:信息定位
Peter.O

1
我知道一定有更好的方法!
misterben

这么短,它运行顺利。伟大的贡献!学习/掌握正则表达式的
love.by.Jesus 16-11-08

'在这种情况下,您不需要两个:locate -r /log$足够了。
simlev

5

你有没有尝试过:

locate /home/insertusernamehere/*/filename

要么

locate file | grep -i '^/home/.*/examplesubdirectory'

或任何此类变化?


该答案表明这grep不是必需的,并且从第一个建议的选项中可以看出,regexp都不是。
汤姆(Tom)

2

这里是

locatedir () {
    locate "$*" | while read line
    do 
    if [ -d "$line" ] ; then echo $line ; fi
    done
}

locatedir $*

1
如果您可以解释所做的更改,则对其他人员也将有所帮助。
罗恩2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.