[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

renomear pastas com caracteres invalidos.



Tenho em meu sistema várias pastas com nomes assim
'capela-a�o-inox-316', no local do 'ç', simplesmente um '?' e não
consigo renomea-la via terminal com o find.
Isso ocorreu na época em que migramos do NT->Samba e depois do ISO
Latin1 para UTF8. Então só os arquivos muito antigos sofrem desse
problema.

Eu queria achar um jeito de renomear todas essas pastas via script,
mas tá dificil, o script sempre esbarra nesses caracteres invalidos.

Eu estou fazendo mais ou menos assim :

for f in `find /local/para/renomear -type d  2>/dev/null` ; do
  CUR_FOLDER=`dirname $f`
  CUR_BASENAME=`basename "$f"`
  # renomeando para minusculo e removendo espacos/caracteres especiais
  g=`expr "xxx$g" : 'xxx\(.*\)'|tr '[A-Z]' '[a-z]'|tr ' ' '_'`
  g="${g//[:;*?\"<>|]/_}"

  if [ "$CUR_BASENAME" != "$g" ] ; then
    echo "rename : $f -> $CUR_FOLDER/$g"
    # mv "$f" "$CUR_FOLDER/$g"
  fi
done

O script tá emperrando nas pastas com caracteres inválidos onde ele
trunca o nome do arquivo na nésima casa onde está o suposto caracter
invalido.
A saída seria o find exibir os caractes de escape do tipo \0345 para
representar a acentuação envolvida, mas parece que o find não tem
parametro para isso.

Alguem conhece alguma solução para este problema ou algum programa que
se propõe a isso ?

Reply to: