Usando subshells com find
O *
será expandido pelo seu shell antes de find
vê-lo, então está errado - pode até causar perda de dados. Você não pode citar, porque então não será expandido de todo.
O que você precisa é de um subshell que receba a pasta como um argumento e faça a expansão mais tarde:
find . -type d -name '2016*' -exec sh -c 'mv -- "$0"/* /path/to/target/' {} \;
O --
impede que arquivos com um -
inicial sejam interpretados como mv
e você deve citar o nome da pasta em "$0"
.
Usando puro Bash
Uso alternativo de globalização recursiva com Bash ≥ 4.0:
shopt -s globstar
mv **/2016*/* /path/to/target/
Eu acho que isso é muito mais limpo, apesar de quebrar com um número muito grande de arquivos.