cd para o diretório pai e, em seguida:
for f in */abcd*;
do mv $f ./
done
que corresponderá a mydir1/abcdfoo
, mydir2/abcdbar
etc. e os moverá para o pwd (que é o diretório pai). Se você quiser apenas procurar em diretórios chamados mydir *, você pode especificar
for f in mydir*/abcd*;
do mv $f ./
done
Você também pode fazer
find . -name "abcd*" -type f -exec mv {} ./ \;
que encontra todos os arquivos regulares (não dirs) chamados abcd * e os move para o pwd. Find parece recursivamente a partir do diretório que você especificar após o comando find, que é "." nesse caso. Você pode usar caminhos absolutos como:
find /path/to/the/parent/dir -name "abcd*" -type f -exec mv {} /path/to/the/destination/dir/ \;
AVISO : só notei isso quando tentei. Se houver vários arquivos com o mesmo nome em diretórios diferentes, mydir1 / abcdfoo, mydir2 / abcdfoo e assim por diante, todos, exceto um deles, serão sobrescritos, deixando apenas um arquivo abcdfoo no diretório pai.