6

I have several projects configured by a pom.xml or similar.

I would like to use the linux file command to locate these projects e.g. by find -name pom.xml. This however takes some time because of the deep paths. I would like to use find -prune to stop searching in subdirectories when I already find the file, but prune only stops on matched directories not on matched files.

Is there a way to get find to stop descending when the directory aleady contains a searched file?

For clarification; this is what I do without 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
}

But I'd rather use a simple way with find so it is better understandable/extendable for others

Hachi
  • 3,237
  • 1
  • 21
  • 29

2 Answers2

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

If you want to speed up the search, you can also work with locate, which queries a database instead of scanning the file system.

You can update the database using by running updatedb

Karel Striegel
  • 1,319
  • 1
  • 9
  • 8
  • this stops on the first matching file but I want to find all files. I thought about locate too, but then I'd have to ensure that it is updated (which may kill the performance) and also filter the results – Hachi Jan 23 '15 at 10:37
0

One line 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 idea from https://stackoverflow.com/a/37267686/1888983

jozxyqk
  • 16,424
  • 12
  • 91
  • 180