Eu sugiro que você use rsync ao invés de cp, se você puder tem a opção -m que excluirá pastas vazias, exemplo:
rsync -am <origin> <destination>
Explicação do comando em explicahell.com
Estou usando a opção -a porque faz muita ação padrão, mas se você quiser também pode usar a opção -r, que irá definir o modo recursivo somente.
[ADD comment]
Eu não sei de uma maneira de fazer isso com cp, pelo menos, a página man não mostra nenhuma opção que vai fazer isso por você.
Você provavelmente pode fazer uma solução mais complexa usando o comando find
para localizar a lista de arquivos / diretórios a serem copiados e, em seguida, passá-los para o cp, mas isso seria muito mais complicado que o rsync. O rsync é praticamente padrão em muitos linuxes