Para cp , o destino é o último argumento na linha de comando. Você especificou 2/g como o último argumento.
Antes de cp ser executado, os parâmetros do comando são expandidos. 1/* expande para 1/a 1/b 1/c . 2/* expande para 2/f 2/g . O comando final executado é cp -r 1/a 1/b 1/c 2/f 2/g , que copiará todos os argumentos (exceto o último) para 2/g .
Se você pretende copiar as coisas para 2 , o segundo glob não é necessário, fazendo o comando cp -r 1/* 2/ . Se você pretende copiar as coisas para vários destinos, não é possível especificar isso com apenas cp ; você pode usar um pequeno loop, como o seguinte:
#!/bin/sh
for path in ./2/*/; do
cp -r 1/* "$path"
done