shell-script-pt
[Top][All Lists]
Advanced

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

Re: [shell-script] Uso do iconv em todos os subdiretorios de um dir raiz


From: andnovelli
Subject: Re: [shell-script] Uso do iconv em todos os subdiretorios de um dir raiz
Date: Thu, 11 Jan 2007 13:20:52 -0200
User-agent: KMail/1.9.1

Olá waldemar! 

Obrigado pela força! 

testei seu script aqui, e verifiquei que ele nao consegue acessar diretorios 
com nomes contendo espaço (usuario de windows adora espaço e acentuação em 
nomes de diretorios) daí modifiquei a variavel $1 para $* para poder pegar 
todo o nome do diretorio no formato "dir\ com\ espaco/" mas mesmo assim nao 
consegui sucesso.

outra coisa que eu fiz foi especificar o encoding de origem, que eu sei que é 
UTF-8, mas agora estou tendo um erro que acredito ser relacionado à forma de 
repassar o valor da variável $* para o iconv

segue abaixo o script:

#!/bin/bash
# | Script para conversão de encoding
# | Uso: ./toiso diretório
# | Waldemar Silva Júnior <address@hidden>

# Variáveis utilizadas no script

TO=ISO-8859-1
DIR=$*  ##para pegar todos os parametros numa tacada só

# Conversão

find $DIR -type f | while read i;
do
 ARQ=`echo $*`
 #TPARQ=`file -i ${i} | awk {'print $3'} | tr ":" " " | sed 's/charset\=//g'`

 #if [ $TPARQ != ISO-8859-1 ]; then

# FROM=$TPARQ
FROM=UTF-8
 ICONV="iconv -f $FROM -t $TO"

 echo -n "Alterando arquivo: " $ARQ " Tipo: " $TPARQ
 cp $ARQ $ARQ.bak
 $ICONV $ARQ.bak -o $ARQ
 rm $ARQ.bak
 echo
 #else
 #echo -n " Ignorando arquivo: " $ARQ " Tipo: " $TPARQ
 #echo

 #fi
done

Tem algum macete pra passar os nomes de diretorios e arquivos com espaço para 
o iconv? 

o fatode eu estar tentando converter imagens, é que os nomes dos arquivs estao 
bagunçados tambem, e o iconv também corrige os nomes! 



obrigadão! 




On Thursday 11 January 2007 10:29, Waldemar wrote:
> Olá André,
>
> Reparei que nas suas modificacoes tinha alguns erros e também me pareceu
> estranho vc ter tentado converter imagens.
> Bom, pelo que eu entendi o que você quer é converter tudo pra ISO-8859-1,
> correto?
> Entào eu modifiquei aqui o script pra você, fica assim:
>
> #!/bin/bash
> #  Script para conversão de encoding
> #  Uso: ./toiso diretório
> #  Waldemar Silva Júnior <address@hidden>
>
> # Variáveis utilizadas no script
>
> TO=ISO-8859-1
> DIR=$1
>
> # Conversão
>
> find $DIR -type f | while read i;
> do
>         ARQ=`echo $i`
>         TPARQ=`file -i ${i} | awk {'print $3'} | tr ":" " " | sed
> 's/charset\=//g'`
>
>         if [ $TPARQ != ISO-8859-1 ]; then
>
>                 FROM=$TPARQ
>                 ICONV="iconv -f $FROM -t $TO"
>
>                 echo -n "Alterando arquivo: " $ARQ " Tipo: " $TPARQ
>                 cp $ARQ $ARQ.bak
>                 $ICONV $ARQ.bak -o $ARQ
>                 rm $ARQ.bak
>         echo
>         else
>                 echo -n " Ignorando arquivo: " $ARQ " Tipo: " $TPARQ
>                 echo
>
>         fi
> done
>
> Rodei aqui com alguns arquivos de teste e funcionou...
>
> wsjunior@wsjunior-laptop:~/CDTC/Testes$ ./teste.sh teste1
> Alterando arquivo:  teste1/arquivo1  Tipo:  utf-8
> Alterando arquivo:  teste1/arquivo2  Tipo:  utf-8
> Alterando arquivo:  teste1/arquivo3  Tipo:  utf-8
> Alterando arquivo:  teste1/arquivo4  Tipo:  utf-8
> Alterando arquivo:  teste1/arquivo5  Tipo:  utf-8
> wsjunior@wsjunior-laptop:~/CDTC/Testes$
>
> Em 11/01/07, andnovelli <address@hidden> escreveu:
> > Olá amigos!
> >
> > Primeiramente obrigado pela força que todos estão dando!
> >
> > Waldemar!
> >
> > Eu dei uma olhada no seu script e achei algumas coisas que eu deveria
> > mudar
> > mas nao estou muito certo ok? por isso vou colocar o script com as minhas
> > alterações para que voce possa me dar mais um help se possivel!
> >
> > Vamos às batatas:
> >
> > #!/bin/bash
> > #  Script para conversão de encoding
> > # | Uso: ./toutf8 diretório
> > # | Waldemar Silva Júnior <address@hidden>
> > # Variáveis utilizadas no script
> > TO=ISO8859-1                ##Este é o charset que eu quero colocar
> > DIR=$1
> > # Conversão
> > find $DIR -type f | while read i;
> > do
> >         ARQ=`echo $i`
> >         TPARQ=`file -i ${i} | awk {'print $3'} | tr ":" " " | sed
> > 's/charset\=//g'`        ##coloquei essa linha junto com a de cima
> >         if [ $TPARQ != ISO8859-1 ]; then  ## eu entendi que o script esta
> > testando se o tipo de arquivo é diferente de ISO8859-1 e o parametro -a
> > $TPARQ != us-ascii eu retirei pq quero que todos estejam em ISO 8859, fiz
> > certo ?
> >
> >                 FROM=$TPARQ
> >                         ICONV="iconv -f $FROM -t $TO"
> >                         echo -n "Alterando arquivo: " $ARQ " Tipo: "
> > $TPARQ
> >                         cp $ARQ $ARQ.bak
> >                         $ICONV $ARQ.bak -o $ARQ
> >                         rm $ARQ.bak
> >                 echo
> >                 else
> >                         echo -n " Ignorando arquivo: " $ARQ " Tipo: "
> > $TPARQ
> >                         echo
> >                         fi
> > done
> >
> > colocando esse escript pra rodar eu recebo um erro na linha 13 (retirei
> > todas
> > as linhas em branco e os MEUS comentarios, deixando apenas os creditos do
> > cabeçalho), e o script ignora todos os arquivos.
> >
> > o que pode estar acontecendo ?
> >
> > abaixo o erro:
> >
> > Ignorando arquivo:  aline/coisas/DANIEL SERV/Daniel/Referencias/114_g.jpg
> > Tipo:  cannot cannot
> > ./nconv.sh: line 12: [: too many arguments
> >
> >
> > Agradeço desde já a sua grande ajuda!
> > André!
> >
> > On Wednesday 10 January 2007 11:14, Waldemar wrote:
> > > Olá André,
> > >
> > > Recentemente eu tive que fazer um script para este tipo de conversão
> >
> > aqui
> >
> > > no meu trabalho. Bom, segue aí o que eu fiz aqui.. Funciona
> >
> > recursivamente
> >
> > > e você só vai precisar fazer alguns ajustes aí pras suas necessidades.
> >
> > Este
> >
> > > aí recebe um diretório como parâmetro e verifica o encoding de todos os
> > > arquivos que encontra, se este for diferente de utf-8 ou us-ascii ele
> > > converte para utf-8 e exibe na tela aqueles arquivos que são
> > > modificados
> >
> > e
> >
> > > aqueles que são ignorados. Sei que pode estar mal elaborado, mas
> >
> > funcionou
> >
> > > para as minhas necessidades. Espero que lhe seja útil de alguma
> > > maneira.
> > >
> > > #!/bin/bash
> > > #  Script para conversão de encoding
> > > #  Uso: ./toutf8 diretório
> > > #  Waldemar Silva Júnior <address@hidden>
> > >
> > > # Variáveis utilizadas no script
> > >
> > > TO=UTF-8
> > > DIR=$1
> > >
> > > # Conversão
> > >
> > > find $DIR -type f | while read i;
> > > do
> > >         ARQ=`echo $i`
> > >         TPARQ=`file -i ${i} | awk {'print $3'} | tr ":" " " | sed
> > > 's/charset\=//g'`
> > >
> > >         if [ $TPARQ != utf-8 -a $TPARQ != us-ascii ]; then
> > >
> > >                 FROM=$TPARQ
> > >                 ICONV="iconv -f $FROM -t $TO"
> > >
> > >                 echo -n "Alterando arquivo: " $ARQ " Tipo: " $TPARQ
> > >                 cp $ARQ $ARQ.bak
> > >                 $ICONV $ARQ.bak -o $ARQ
> > >                 rm $ARQ.bak
> > >         echo
> > >         else
> > >                 echo -n " Ignorando arquivo: " $ARQ " Tipo: " $TPARQ
> > >                 echo
> > >
> > >         fi
> > > done
> > >
> > > Em 10/01/07, andnovelli <address@hidden> escreveu:
> > > > Olá lista!
> > > >
> > > > estou com um pequeno probleminha com uma partição que contem arquivos
> > > > compartilhados pelo samba,  estes arquivos estao com os nomes em
> > > > UTF-8
> >
> > e
> >
> > > > eu
> > > > preciso Tê-los em ISO 8859-1, comecei a fazer a conversão com o iconv
> > > > diretorio por diretorio, mas este trabalho começou a dar no pé, ai
> >
> > pensei
> >
> > > > em
> > > > fazer um script que rode em todos os subdiretorios, e convertendo os
> > > > arquivos, mas ai o bicho ta pegando, estou tendo uns erros e nao sei
> >
> > como
> >
> > > > posso acertar isso!
> > > >
> > > > vejam:
> > > >
> > > > tenho o seguinte shell em /usr/sbin :
> > > > arquivo convauto
> > > >
> > > > #!/bin/bash
> > > > novo="`echo $1 | iconv -f UTF-8 -t ISO-8859-1`"; if [ "$novo" != "$1"
> >
> > ] ;
> >
> > > > then
> > > > mv "$1" "$novo"; fi
> > > >
> > > > para rodar ele em todos os subdirs eu faço assim:
> > > >
> > > > find ./ -type f -exec convauto {} \;
> > > >
> > > > mas nao esta funcionando direito, ele me gera uma série de erros
> >
> > falando
> >
> > > > que o
> > > > arquivo ou dir nao foi encontrado.
> > > >
> > > >
> > > > alguém tem alguma ideia de como posso fazer isso funcionar?
> > > >
> > > > abração!!
> > > >
> > > >
> > > >
> > > > --
> > > > Andre Novelli
> > > > Depto de TI
> > > > +55 11 5534.0017
> > > > address@hidden
> > > > www.embalatec.com.br
> > > >
> > > >
> > > > ---------------------------------------------------------------------
> > > > Esta lista não admite a abordagem de outras liguagens de programação,
> > > > como perl, C etc. Quem insistir em não seguir esta regra será
> > > > moderado sem prévio aviso.
> > > > ---------------------------------------------------------------------
> > > > Sair da lista: address@hidden
> > > > ---------------------------------------------------------------------
> > > > Esta lista é moderada de acordo com o previsto em
> > > > http://www.listas-discussao.cjb.net
> > > > ---------------------------------------------------------------------
> > > > Servidor Newsgroup da lista: news.gmane.org
> > > > Grupo: gmane.org.user-groups.programming.shell.brazil
> > > >
> > > >
> > > > Links do Yahoo! Grupos
> >
> > --
> > Andre Novelli
> > Depto de TI
> > +55 11 5534.0017
> > address@hidden
> > www.embalatec.com.br
> >
> >
> > ---------------------------------------------------------------------
> > Esta lista não admite a abordagem de outras liguagens de programação,
> > como perl, C etc. Quem insistir em não seguir esta regra será moderado
> > sem prévio aviso.
> > ---------------------------------------------------------------------
> > Sair da lista: address@hidden
> > ---------------------------------------------------------------------
> > Esta lista é moderada de acordo com o previsto em
> > http://www.listas-discussao.cjb.net
> > ---------------------------------------------------------------------
> > Servidor Newsgroup da lista: news.gmane.org
> > Grupo: gmane.org.user-groups.programming.shell.brazil
> >
> >
> > Links do Yahoo! Grupos

-- 
Andre Novelli
Depto de TI
+55 11 5534.0017
address@hidden
www.embalatec.com.br


reply via email to

[Prev in Thread] Current Thread [Next in Thread]