Tratar:
find . -type d -regex './[a-z]*' -exec bash -c 'cp -v "$1"/* ..' Cp {} \;
Discusión
Considerar:
find . -type d -regex './[a-z]*' -exec cp -v {}/* .. \;
Cuando bash ve esta línea, realiza la expansión del nombre de ruta en {}/*. Como allí (normalmente) no hay un directorio con nombre {}, *se deja como literal *. Esto no es lo que quieres. Necesita que se produzca la expansión del nombre de ruta después de find haber sustituido {}. Al poner el cpcomando entre comillas y pasarlo como argumento bash -c, logramos ese objetivo.
Un formulario de muestra para bash -cparecerse a:
bash -c 'code...' a b c
Esto le dice a bash que asigne aa $0, ba $1, ca $2y luego ejecute code.... Si se produce un error, el shell se usa $0como el nombre del programa que se está ejecutando (en el mensaje de error). Arriba, elegimos Cpcomo nombre descriptivo. Además, como arriba, {}se sustituye $1y usamos $1en el code.... Cuando se usa de esta manera, {}no necesita ser citado (pero no hace daño si lo hace); findmaneja cualquier escape que sea necesario. code...Sin embargo, el interior $1debe estar entre comillas dobles para proteger contra la división de palabras y la expansión del nombre de ruta.
Esto también podría funcionar
fuente