Is it possible to search for a directory/file combination

find

I need to find an image, say ABC.jpg, that I know will have been programmatically placed into a directory named ABC_MPSC. I've tried:

cd /
find . -name "ABC_MPSC/ABC.jpg"

But that doesn't return anything (I actually know where the particular one I'm searching for is, so I know it exists). Is there a find command that could allow me not have to search manually?

Best Answer

There's a -path predicate that's useful here:

find . -path '*/ABC_MPSC/ABC.jpg'

The POSIX description for that predicate is:

The primary shall evaluate as true if the current pathname matches pattern using the pattern matching notation described in Pattern Matching Notation. The additional rules in Patterns Used for Filename Expansion do not apply as this is a matching operation, not an expansion.

The reason that your -name "ABC_MPSC/ABC.jpg" failed is because the -name predicate:

shall evaluate as true if the basename of the current pathname matches pattern

In other words, -name never sees the directory of the current filename, only the base filename itself (ABC.jpg, for example).