Eu faria isso em bash , usando globstar . Conforme explicado em man bash :
globstar
If set, the pattern ** used in a pathname expansion con‐
text will match all files and zero or more directories
and subdirectories. If the pattern is followed by a /,
only directories and subdirectories match.
Portanto, para mover o diretório run para o diretório de nível superior x e, em seguida, exclua o restante, você pode fazer:
shopt -s globstar; mv x/**/run/ x/ && find x/ -type d -empty -delete
O comando shopt ativa a opção globstar . O mv x/**/run/ x/ moverá todos os subdiretórios denominados run (observe que isso só funcionará se houver apenas um diretório run ) para x e o find excluirá todos os diretórios vazios.
Você poderia fazer a coisa toda no shell com globbing estendido, se preferir, mas eu prefiro a rede de segurança de find -empty para ter certeza de que nenhum diretório não vazio seja deletado. Se você não se importa com isso, você pode usar:
shopt -s globstar; shopt -s extglob; mv x/**/run/ x/ && rm -rf x/!(run)