查找但不进入包含搜索文件的目录

6
我有几个配置在pom.xml或类似文件中的项目。
我想要使用Linux文件命令来查找这些项目,例如通过“find -name pom.xml”。由于深路径,这需要一些时间。我想使用“find -prune”在已经找到文件时停止搜索子目录,但是修剪只会在匹配的目录上停止,而不是在匹配的文件上停止。
是否有办法让find在目录已经包含搜索文件时停止下降?
为了澄清;这是我在不使用find的情况下所做的事情:
pfind() {
    parent=$1 && shift

    for file in "$@" ; do
        path=$parent/$file
        if [ -e "$path" ] ; then
            echo "$path"
            exit 0
        fi
    done

    for dir in $(echo $parent/*) ; do
       if [ -d "$dir" ] ; then
           pfind "$dir" "$@"
       fi
    done
}

但我宁愿使用find命令,这样对于其他人来说更易于理解和扩展

2个回答

1
find . -name pom.xml -print -quit

如果您想加快搜索速度,可以使用 locate,它会查询数据库而不是扫描文件系统。
您可以通过运行 updatedb 来更新数据库。

这会在找到第一个匹配的文件后停止,但我想要找到所有的文件。 我也考虑过使用locate,但那样我就必须确保它已经更新(这可能会影响性能),并且还要过滤结果。 - Hachi

0

一行Python代码:

python -c 'import os; print "\n".join(p for p, d, f in os.walk(os.sys.argv[1], topdown=True) if os.sys.argv[2] in f and list(d.remove(i) for i in list(d)))' $PWD pom.xml

os.walk的想法来自https://dev59.com/rWIj5IYBdhLWcg3wzIJo#37267686


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接