This code justs lists the regular files that were modified on 2012/05/15. You can drop the -ls from the find and pipe it to xargs rm -f once you are sure that the list of files produced is what you want to delete.
ls -l /your/directory |grep "^-.*May 15" #|xargs rm
Remove the hash when you're sure. It deletes all that appear to be regular files (leading dash in the ls output) and have the date (May 15) somewhere in the rest of the record. Realise that it will delete files from May 15th of previous years, as well as any files that have that string in the name. Like I said, not exact and lots of room for error.
i seriously do not recommend using "find" for this problem, as (as you know) it searches recursively...
i prefer the straightforward approach:
ls -l | grep "May 15" | awk '{print $9;}' | tee /tmp/log
once i'm happy with that output:
/bin/rm `cat /tmp/log`
This is using some of the ideas also offered above. Primarily, the idea that you are able to check your work (multiple times) before running the final 'rm' command.
oh... and you can add "| grep -v ^d" in that pipeline to avoid grabbing directories.
I seriously recommend against recommending to not use find for this task ;).
find does not have to recurse into subdirectories if that is not desired. On GNU/Linux and *BSD systems, all finds support -maxdepth n . On systems that do not support that primary, the following gets the job done:
find "$path" ! -name "$path" -prune ...
Your "straightforward approach" is actually more complicated, brittle, and error prone. In addition to all the reasons mentioned by agama in post #6, filenames with whitespace will not make it through intact.
grep/awk are misc text processing tools. find's primaries know what they're looking at. In my opinion, find is the right tool for the job.