Script - muda nomes de arquivos de iso-8859-1 para utf8 recursivamente

Publicado por Daniel Ribeiro da Silva (última atualização em 19/06/2011)

[ Hits: 4.812 ]

Homepage: http://danielbr-news.blogspot.com/

Download fix_filename_iso2utf8.sh




Como utf8 é o padrão mais adotado ultimamente e o windows tema em manter um padrão próprio (podemos chamar isso de padrão?!), resolvi fazer esse script para me ajudar no dia a dia:

A partir do diretório atual, vai corrigindo nomes de diretórios e arquivos de iso-8859-1 para utf8.
Pode ser necessário rodar mais de uma vez, mas funciona que é uma beleza.

Vou postar também o link de outro script que muda o conteúdo de  iso-8859-1 para utf8 em arquivos de texto, html e xml. Afinal, mudar somente o nome dos arquivos não é suficiente.

[]s
Daniel Ribeiro
http://danielbr-news.blogspot.com
http://danielbr-dev.blogspot.com

  



Esconder código-fonte

#!/bin/bash

CONVERTER (){

      for i in *
         do
               #novonome=$(echo "$i" | iconv -f iso-8859-1 -t utf-8 | tr ' ' '_' ) | \
               #tr '[:upper:]' '[:lower:]')

      resultado_isutf8=$( isutf8 "$i" | grep false )
      if [ "$resultado_isutf8" == "" ]
      then
         continue
      fi

          novonome=$(echo "$i" | iconv -f iso-8859-1 -t utf-8 )
               if [ "$novonome" != "$i" ] ; 
               then
                 echo "   Renomeando \"$i\" para \"$novonome\"... em $( pwd )"
                 mv "$i" "$novonome"
               fi
        done
}

PROCESSA_DIR(){
        
        diretorios=$( find ./ -type d )
        #ROOT=$( pwd | sed 's/\ /\\\ /g' )
   ROOT=$( pwd )       
   
   SAVEIFS=$IFS
   IFS=$(echo -en "\n\b")
        for d in $diretorios
        do
      dir=$d
      
      resultado_isutf8=$( isutf8 "$d" | grep false )
      if [ "$resultado_isutf8" != "" ]
                then
         count=0
         SAVEIFS2=$IFS
         IFS=$(echo -en "/")
         for t in $d
         do
            #echo "Parte: $t"
            novonome=$t
            
            resultado_isutf8=$( isutf8 "$t" | grep false )
            if [ "$resultado_isutf8" != "" ]
            then
               novonome=$(echo "$t" | iconv -f iso-8859-1 -t utf-8 )
            fi
            
            nomes[$count]=$novonome
            
            count=`expr $count + 1`
         done
         IFS=$SAVEIFS2
                        
         novonome_final=""
         count2=0
         while [ $count2 -lt $count ]
         do
            novonome_final=$( echo "$novonome_final""${nomes[count2]}""/" )
            
            count2=`expr $count2 + 1`
         done
         
         dir=$novonome_final
                fi

                #echo "--- Process $dir ---"
      #dir=$( echo "$d" | sed 's/\ /\\\ /g' )
      cd "$dir"
                CONVERTER
                #echo "------------------"
                cd "$ROOT"
        done
   IFS=$SAVEIFS
}

PROCESSA_DIR

Scripts recomendados

Script Iptables para servidor DNS e SSH

Relógio em tempo real no terminal

backupsl.sh

dep-info - verificar se o programa está instalado no sistema

akill


  

Comentários


Contribuir com comentário