É bastante simples com o GNU find (encontrado no Linux) ou qualquer outro achado que suporte -execdir
:
find A -type f -execdir mv -i {} .. \;
Com um padrão find
:
find A -type f -exec sh -c 'mv -i "$1" "${1%/*}/.."' sh {} \;
Com zsh:
zmv -Q -o-i 'A/(**/)*/(*)(.)' 'A/$1$2'
Se a estrutura de diretórios sempre tiver o mesmo nível de aninhamento, você não precisará de nenhuma travessia recursiva (mas remover diretórios vazios primeiro):
for x in */*; do; echo mv -i "$x"/*/* "$x"/..; done