Pages

Saturday, January 08, 2011

Modificações no CodeConvert

Para quem não sabe ou não se lembra, o CodeConvert é um script que realiza a conversão de nomes e conteúdo de arquivos em formato ISO para formato UTF (e vice-versa). Foi originalmente publicado n tópico "Alternando arquivos entre codificações UTF-8 e ISO-8859-1. Pois bem, essa semana eu recebi um e-mail de John Robson que transcrevo abaixo (com a devida autorização dele).

Prezados: João Felipe Mitre, Marcelo Oliveira, Benneh Carvalho e Sérgio.
(procurei o email de todos, mas não achei nada nos blogs deles, por
favor encaminhe se possível esta msg para eles).

Recentemente migrei milhares de arquivos do Windows para o Ubuntu, são
15 anos de arquivos!!!

Utilizei o script de vcs e gostaria de lhes agradecer muito.

Fiz algumas alterações para tornar o processo de migração eficiente e
gostaria de lhes sugerir um trabalho maior que o feito atualmente.

Explicando: Para converter arquivos do Windows para o Linux de forma
eficiente vários procedimentos devem ser realizados:

0) TODOS os procedimentos são executados para Todos os Arquivos e Pastas
Recursivamente.

1) Alterar as permissões das pastas e dos arquivos. Isso deve ser feito
pq o Windows não segue o mesmo padrão de permissões do Linux e quando vc
copia direto, vc percebe que (por exemplo) alguns arquivos .TXT acabam
tendo as permissões de execução ativadas e isso é ruim, pois vc clica
para abrí-lo e ele pergunta se quer executá-lo.

$ find /home/user/dir/ '!' -type d -exec chmod u=rw,g=r,o=r-x {} \; #
altera as permissões das pastas

$ find /home/user/dir/ -type d -exec chmod ugo+rx {} \; # altera as
permissões dos arquivos

2) Alterar o formato ISO-8859-1 para UTF-8.

$ find /home/user/dir/ '!' -type d -exec ./CodeConvert.sh -2utf {} \; #
converte de ISO88591 para UTF8

*** Alterações:
a) inseri o comando: dos2unix -k -o -q "$i" # Este comando converte a
quebra de linha no formato Windows para o formato Unix (ou seja, dos
códigos ascci 10 e 13 para somente o 13), não sei se ele altera mais
alguma coisa, acho que não e o testei várias vezes, ele não tem problema
em ser chamado várias vezes no mesmo arquivo.

b) acrescentei o formato: unknown-8bit que é um formato ISO que tb
aparece no Windows além do iso-8859*.

c) *IMPORTANTE: substituí o iconv pelo: recode iso-8859-1..UTF-8 "$i"
O motivo desta substituição foi principalmente pq o iconv altera a data
para a data atual e o recode mantém a data original o que é muito
importante para quem tem 15 anos de arquivos!!! Além do mais pelo que
pesquisei parece que o iconv é obsoleto e o recode é o melhor, ele tb
faz alterações para mais de 300 formatos!!!

d) fiz outras alterações pequenas no algoritmo como o uso de switchs e
comando if [ -n "$codificacao" ]; ou invés do if [ ! -z "$codificacao" ];

e) retirei o backup pois ele não criava sub-pastas então todos os
arquivos ficariam em 1 pasta única.

Por fim, como um opcional eu verifico se ainda sobrou algum ISO

find /home/user/dir/ '!' -type d -exec file --mime-encoding {} \; |
grep 'iso' # verifica se existe algum ISO

Eu executei estes comandos + o script alterado em 72,376 items,
totalling 39.3 GB, muitos tiveram a quebra de linha convertida e vários
a conversão de ISO para UTF-8, porém a grande maioria não passou por
conversão alguma. TUDO deu CERTO!!! só tive 1 problema: arquivos de
Email (somente os de Email) do Thunderbird devem estar em formato
ISO-8859, pois parece que é um padrão na internet. Então, para não
ficar fora deste padrão, estes arquivos não precisam ser convertidos...
o resto, pode converter normalmente, ficou tudo perfeito, sem problema
algum e o melhor, as datas continuaram corretas!!!

....
[]'s
John

Bom, o e-mail é claro. O John escreveu dicas, propôs correções e fez correções no script que ele também me enviou por email.

Então, eu compartilho o script com todos através desse blog aproveitando para repassar as congratulações aos demais autores do script.

As modificações que não foram executadas estão na linha lista de coisas para fazer, em breve, novidades, como por exemplo, a criação de um projeto formal para o script (também idéia do John, na parte do e-mail que eu cortei).

O novo script está no disponível aqui (e também no tópico original) para quem tiver interesse.

1 comment:

  1. Valeu Mitre. Cada script ou contribuição que fazemos torna o eco-sistema do Software Livre mais forte. Parabéns

    ReplyDelete