I couldn't find a way to do it with find
directly, but it's very easy using a for loop:
for file in *.pdf; do [ -f $.csv ] || echo $file; done
If you need to run it at the top directory and have it recurse, you could use find like this:
for file in $(find . -iname '*.pdf'); do [ -f $.csv ] || echo $file; done
which would output something like this:
./dir2/test7.pdf ./dir2/test6.pdf ./dir2/test8.pdf ./dir3/test7.pdf ./dir3/test6.pdf ./dir3/test8.pdf ./dir1/test7.pdf ./dir1/test6.pdf ./dir1/test8.pdf
Careful with that last one though, if you aren't sure there won't be any strange characters in the input filenames, make sure you set IFS environment variable accodingly:
OFS=$IFS export IFS=$'\n'
Of course, from here on it only gets nastier.
I'm assuming you use bash.