Data: 16/08/2006
Fonte: http://www.vivaolinux.com.br/dicas/impressora.php?codigo=7329
Corrigindo nomes de arquivos com charset errado
Muitas vezes, ao copiar arquivos de um computador para outro, principalmente via CD, os nomes dos arquivos ficam desajustados, mais especificamente os caracteres acentuadas e a cedilha. Por exemplo, um arquivo "Já Refulge a Glória Eterna.mp3" aparece como "Já Refulge a Glória Eterna.mp3".
Esse problema está relocionado ao charset do sistema de origem e o do seu sistema, que são diferentes. Entretanto, podemos facilmente resolver o problema e, com apenas um único comando, corrigir os nomes de todos os arquivos e diretórios presentes em um diretório qualquer.
Antes de mais nada, temos que saber qual o charset do seu sistema e o dos nomes dos arquivos. Para saber o charset do seu sistema, execute o comando locale. A saída será parecida com essa:
$ locale
LANG=pt_BR
LC_CTYPE="pt_BR"
LC_NUMERIC="pt_BR"
LC_TIME="pt_BR"
LC_COLLATE="pt_BR"
LC_MONETARY="pt_BR"
LC_MESSAGES="pt_BR"
LC_PAPER="pt_BR"
LC_NAME="pt_BR"
LC_ADDRESS="pt_BR"
LC_TELEPHONE="pt_BR"
LC_MEASUREMENT="pt_BR"
LC_IDENTIFICATION="pt_BR"
LC_ALL=pt_BR
O charset padrão do Linux é o ISO-8859-1 (também conhecido como Latin1). Sendo assim, tanto pt_BR quanto pt_BR.ISO8859-1 são para esse charset. Se, por outro lado, aparecer algo como pt_BR.UTF-8, então o charset do seu sistema é UTF-8.
Agora, vamos verificar o charset dos nomes dos arquivos. Para isso, acesse o diretório onde estão os arquivos e faça o seguinte procedimento:
$ ls -1 > lista
$ file lista
lista: UTF-8 text
Ou seja, o charset dos nomes dos arquivos é UTF-8, enquanto o do sistema é ISO-8859-1. Com essa informação em mãos, basta executar o seguinte comando, para corrigir os nomes dos arquivos:
#############
Trecho retirado do blog do mitre:
http://jfmitre.blogspot.com/2006/05/convertendo-arquivos-utf-8-em-iso-8859.html
O comando é muito simples: iconv
Faz parte da libc6, ou seja, todo mundo têm instalado, e possuí sintaxe simples.
iconv -f codificacao_de_origem -t codificacao_de_saida arquivo
Assim para converter UTF-8 para ISO-8859-1 temos:
iconv -f utf-8 -t iso-8859-1 arquivo
Para o contrário utilizamos:
iconv -f iso-8859-1 -t utf-8 arquivo
É necessário redirecionar a saida de arquivo para algum lugar, algo como:
iconv -f utf-8 -t iso-8859-1 arquivo > novo_arquivo
Sendo assim, eu acrescentei ao meu ~/.bashrc* as seguintes linhas
alias iso2utf='iconv -f iso-8859-1 -t utf-8'
alias utf2iso='iconv -f utf-8 -t iso-8859-1'
Agora quando eu quiser converter um tipo de arquivo em outro, eu só preciso usar o iso2utf ou o utf2iso
Agora, por que tanta desinformação sobre assunto ? É tão fácil converter um tipo em outro, é tão simples !
*Ainda não atualizei o ~/.bashrc disponível para download neste blog, quando ocorrer tal modificação eu informo.
Fonte: http://jfmitre.blogspot.com/2006/05/convertendo-arquivos-utf-8-em-iso-8859.html
######################################
$ ls -1 | while read arquivo ; do
novo="`echo $arquivo | iconv -f UTF-8 -t ISO-8859-15`"
if [ "$novo" != "$arquivo" ] ; then
mv "$arquivo" "$novo"
fi done
Um outro jeito sem a criação de um laço:
find -maxdepth 1 -type f | xargs -i iconv -f iso-8859-1 -t utf-8 {} -o {}
O segredo está no comando iconv, que converte o charset, de UTF-8 (-f UTF-8) para ISO-8859-15 (-t ISO-8859-1). Se no seu sistema os charsets forem outros, basta trocar ISO-8859-1 e UTF-8 pelos respectivos charsets.
Agradecimentos especiais ao Eduardo por ajudar na melhoria dessa dica, indicando uma situação onde ela não se aplicava (vide comentários abaixo).
Abraços,
Davidson
Script para converter todos os arquivos para utf-8
#!/bin/bash
PROGRAMA=`basename $0`
for i in *
do
if [ "$PROGRAMA" != "$i" -a ! -d "$i" ]
then
iconv -f iso-8859-1 -t utf-8 $i > $i.utf
mv $i.utf $i
fi
done
http://www.vivaolinux.com.br/dicas/verDica.php?codigo=7329
Veja também
Comments (0)
You don't have permission to comment on this page.