The cp command, in my opinion, should have an exclude switch available to it. I find myself needing to copy everything but a file or a folder and cp can't handle this requirement. So with a bit of googling around and testing, I have a way to do it. To copy all in the current folder to "bar/" excluding any folder or file called "foo", we do this:
for i in * ; do if [ "${i}" != "foo" ] ; then cp -r "${i}" "bar" ; if ; done
If you need to exclude a few files and folders, simply add in an AND operand and the value, like so:
for i in * ; do if [ "${i}" != "foo" ] && [ "${i}" != "example.txt" ]; then cp -r "${i}" "bar" ; if ; done
I didn't error check that, just did it from memory, so I hope it works for you.