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 <[EMAIL PROTECTED]> # 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 <[EMAIL PROTECTED]> > > # 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... > > [EMAIL PROTECTED]:~/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 > [EMAIL PROTECTED]:~/CDTC/Testes$ > > Em 11/01/07, andnovelli <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> > > # 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 <[EMAIL PROTECTED]> > > > > > > # 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 <[EMAIL PROTECTED]> 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 > > > > [EMAIL PROTECTED] > > > > 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: [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- > > > > 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 > > [EMAIL PROTECTED] > > 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: [EMAIL PROTECTED] > > --------------------------------------------------------------------- > > 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 [EMAIL PROTECTED] www.embalatec.com.br