Isso deve funcionar e ser agnóstico de shell, executá-lo como um script com um único parâmetro, que é o seu diretório base.
-
Ele usa
find
para obter os nomes dos diretórios um por linha, presumindo que eles estejam localizados imediatamente abaixo do diretório base fornecido e excluindo quaisquer que já tenham sido convertidos. -
Ele usa
awk
para remover o diretório base da lista, deixando em cada linha apenas o nome do diretório imediato que é o que você deseja alterar. (awk
aqui usa / como um delimitador de campo e imprime o último campo em cada linha.) -
Ele usa
awk
uma segunda vez para imprimir um comandomv
para renomear cada um desses diretórios da maneira que você solicitou. (awk
aqui usa o espaço em branco padrão como um delimitador de campo.) -
Salve a saída em um arquivo e execute-a quando estiver satisfeito.
.
#!/bin/sh
find "$1" -mindepth 1 -maxdepth 1 -type d -not -name "*,*"|\
awk -F/ '{print $NF}'|\
awk -v DIR="$1" '{printf "mv \"" DIR "/" $0 "\" \"" DIR "/" $NF", "; for (i=1; i<NF; i++) {printf $i" "}; printf "\"\n"}'