Você está na página 1de 11

http://www.zago.eti.br/script/converter-arquivos.txt Neste documento, modelos de script pra converter arquivos, converter nomes, contedo, formato, renomear e etc....

Veja tambm o FAQ: http://www.zago.eti.br/convert.txt Use CTRL+F para refinar a pesquisa. Linha de: **************** separa mensagens ou tpicos.

******************************************************** Zago http://www.zago.eti.br/menu.html FAQ e artigos sobre Linux Pra rodar qualquer modelo de script abaixo, tenha o cuidado de saber o que est fazendo, procure fazer em HD de testes, quando isto no for possivel procure fazer em um diretrio de testes, procure entender o que est fazendo, alguns scripts so destrutivos, portanto, backup nunca de mais....... Pra Converter arquivos do linux pra windows ou vice versa, veja sobre dos2unix e unix2dos no FAQ: http://www.zago.eti.br/convert.txt Pra arrumar nome de arquivos, tirar caracteres especiais e converter nomes pra minusculo, procure neste documento pro funes zz. http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=1398 Codificao de caracteres de arquivos ASCII dicas pra converter arquivos com caracteres especiais, acentos e codificao de idioma. ******************************************************** RENOMEAR ARQUIVOS: Este script renomeia pra minusculo o nome de todos os arquivos do diretrio corrente. #!/bin/bash for file in `ls` do mv $file `echo $file | dd conv=lcase` echo $file done Este script renomeia pra MAIUSCULO o nome de todos os arquivos do diretrio corrente. [root@ufla oldirceu]# cat TESTE #!/bin/bash for file in `ls` do mv $file `echo $file | dd conv=ucase` done OBS. Os exemplos acima no convertem arquivos espaos no nome.

Precisa remover os espaos ou substituir por _, prefiro fazer a troca do espeo por underline ou hifen _ - , esta linha de comando faz a troca do espao por underline _ : [root@ufla tmp]# for i in `ls | sed 's/ /_/g'`; do ARQ=`echo $i | sed 's:_: :g'` ; mv "$ARQ" $i; done depois de retirar os espaos a linha de comando abaixo converte tudo pra minusculo. [root@ufla tmp]# for i in *; do mv -i $i $(echo $i | tr "[upper]" "[lower]"); do ne Pra trocar algum simbolo, por exemplo () utilizado nos nomes, quando for poucos arquivos vale a pena fazer manual mesmo, acesse pelo ambiente grfico (konqueror) e faa a alterao, pra fazer na linha de comando precisa usar a barra invertida \ antes de cada espao e simbolo, use a tecla tab pra completar o nome ou o mouse pra copiar e colar, por exemplo pra renomear o arquivo BANESPA (1).dbx pra banespa_1.dbx execute o comando: mv BANESPA\ \(1\).dbx banespa_1.dbx Deve ter algum script pronto pra isto, no localizei nem consegui fazer no momento que escrevia este tuto, qualquer contribuio ser bem vinda, preciso de algo que faa isto atraves de script, voce tem a soluo? Zago ******************************************************** ARRUMANDO NOME DE ARQUIVOS. funcoeszz zzarrumanome Configuraes de idiomas, arquivos copiados de um sistema pra outro e outras tantas situaes acabam aparecendo arquivos nomeados de diferentes maneiras que complica automatizar tarefas com o uso de scripts. Arquivos a serem utilizados em scripts no deve ter espaos no nome nem caracteres acentuados ou simbolos, o melhor remover tudo, limpar o nome, claro que isto tambm pode trazer outros problemas, alm dos usurios reclamarem do novo nome tem situaes que pode resultar em erro ou perda de arquivos, voce pode renomear os arquivos na mo, konqueror ou linha de comando um a um a seu modo. Ou simplesmente com uma linha de comando, no site do Aurelio tem um script prontinho pra fazer isto, a funo zzarrumanome. Acesse a pgina do Aurelio: http://www.aurelio.net, faa download das funces zz, siga as intrues da pgina, fazer o download do arquivo com todos os scripts, no copie e cole somente uma funo porque no funciona, tem que salvar o arquivo em um diretrio do path, torna-lo executvel e depois v pro diretrio onde esto os arquivos pra arrumar o nome e digite: funcoeszz zzarrumanome * Prontinho, todos os arquivos no diretrio onde executou o comando esto com nomes em minusculo, sem acentos, trocou espaos por _ e retirou os caracteres especiais, lembre de agradecer ao Aurelio.....

Prefira sempre fazer em um diretrio a parte ou at mesmo em outra maquina, em micros de produo faa somente depois de testado e saber o que est fazendo. RESUMO ZAGO ( faz tudo, como root, basta colar as linhas abaixo no prompt pra baixar as funes e arrumar nomes dos arquivos em /tmp) cd /usr/bin wget http://aurelio.net/zz/funcoeszz chmod +x funcoeszz cd /tmp funcoeszz zzarrumanome * ******************************************************** em 27/01/2006 recebi este relato de; (Tulio M. Barros - UIN(ICQ):1593641 tmbarros[a]myrealbox.com LUN:174012 Tentei usar o funcoesZZ num determinado subdiretrio e ele renomeou todos os 55 arquivos para .1, .2, .3, .4, ... .54, .55, foi coisa de louco. Talvez seja bom falar com o Aurlio sobre esse bug.) Achei estranho, sempre uso no CL10 e nunca detectei isto, ento resolvi testar no SUSE 10 usar as funes zz sem instalar, criei o diretrio testezz dentro de meu home para arrumar o nome dos arquivos em /tmp/testenome; ls /tmp/testenome/ nome com espa?os.txt refei??o.doc referencial te?rico.doc rela??o.doc mkdir testezz cd testezz wget http://aurelio.net/zz/funcoeszz chmod +x funcoeszz funcoeszz zzarrumanome /tmp/testenome/* Resultado errado, os arquivos ficam ocultos (iniciam com ponto) e realmente nomeia os arquivos com numeros .1, .2, ...... Resolvi fazer o mesmo teste no CL10, instalado com os CD normais, sem o CD upd1 e sem qualquer atualizao, funcionou, veja o resultado; [zago@faqcl10 testenome]$ ls refeio.doc referencial terico.doc rela?o.doc [zago@faqcl10 testenome]$ wget http://aurelio.net/zz/funcoeszz --00:08:07-- http://aurelio.net/zz/funcoeszz => `funcoeszz' Resolving aurelio.net... 66.35.250.210 Connecting to aurelio.net[66.35.250.210]:80... connected. Requisio enviada ao servidor HTTP, esperando resposta... 200 OK Tamanho: 90,889 [text/plain]

100%[=================================>] 90,889

28.69K/s

ETA 00:00

00:08:11 (28.61 KB/s) - `funcoeszz' recebido [90889/90889] [zago@faqcl10 testenome]$ chmod +x funcoeszz [zago@faqcl10 testenome]$ ./funcoeszz zzarrumanome * `refeio.doc' -> `./refeicao.doc' `referencial terico.doc' -> `./referencial_teorico.doc' `rela\207o.doc' -> `./rela_o.doc' [zago@faqcl10 testenome]$ ls funcoeszz refeicao.doc referencial_teorico.doc rela_o.doc Soluo? No tenho, sei que funciona no CL10, em outras distros pode dar problema, portanto aplique antes em diretrio de testes para ver o resultado ou aplique esta dica do Tulio, veja mensagem abaixo. De: Tulio Miranda Barros <tmbarros # myrealbox.com> Para: Linux-Br <linux-br@bazar2.conectiva.com.br> Assunto: Re: (linux-br)Renomear arquivos com unicode invlido [soluo] Data: Sat, 04 Feb 2006 02:48:03 -0300 Ol gente, Confesso que no foi das mais elegantes e inteligentes solues, mas como meu problema no era to monstruoso assim (perto de 3 mil arquivos em apenas 6 diretrios) repeti o procedimento 6 vezes. Basicamente, o que fiz foi: ls > arquivos e sai editando o "arquivos" de tal forma que terminasse com algo como: mv article\?\=aborto\ \&\ homicdio article__aborto\ e\ homicidio depois rodei o "script". O processo de edio relavitamente rpido feito numa planilha do openoffice - duplicar uma coluna e fazer alteraes. Prontas as colunas, colei no gedit e substitui \n por \nmv e \t por " " (espao). Inclui #!/bin/bash e executei. Obrigado a todos que ajudaram []'s -*********************************** Tulio M. Barros - UIN(ICQ):1593641 tmbarros[a]myrealbox.com LUN:174012 *********************************** ******************************************************** REMOVENDO LINHAS DE ARQUIVOS. com cat e grep, neste exemplo pra remver do arquivo access.log as linhas que contenha a palavra secureweb, basta executar: cat access.log |grep -v "secureweb" > accesslimpo

preserva o arquivo original e salva as alteraes em accesslimpo ou seja accesslimpo no tem linhas com a palavra secureweb. Limpar os arquivos de configurao, tirar os comentarios. No adoto isto, mas tem que pede pra fazer, prefira fazer uma copia antes, por exemplo pro arquivo /etc/sarg.conf: cd /etc/sarg cp sarg.conf sarg.conf.original pra limpar o arquivo e fazer a copia de volta: cat sarg.conf.original |grep -v "#" > sarg.conf ou indique o caminho do arquivo, ex.: cat /etc/sarg/sarg.conf.original |grep -v "#" > /etc/sarg/sarg.conf Lembre de manter uma copia do original, faa antes de substituir ou renome-los. Ou com egrep, neste exemplo salva a saida no arquivo sarg.conf sem as linhas iniciadas com # e remove tambm a linhas em branco cp sarg.conf sarg.conf.original egrep -v "^#|^$" sarg.conf.original > sarg.conf Remover o primeiro caracter de cada linha do documento, independe de qual seja o caracter, cortar somente o prirmerio caracter: por exemplo do arquivo dd.txt e salva em dd2.txt cat dd.txt | cut -c 2- > dd1.txt Pra remover os primeiros 2 caracteres de cada linha. cat dd.txt | cut -c 3- > dd2.txt Note que a diferena est no parametro que muda de 2 pra 3, pra remover mais caracteres, altere este parametro e faa testes. Remover todas as linhas que inicia com sinal de maior ">" por exemplo do arquivo dd.txt do FAQ, salvar a saida em ddmenos.txt egrep -v "^>" dd.txt > ddmenos.txt Pra eliminar tambm as linhas em branco: egrep -v "^>|^$" dd.txt > ddmenos.txt ed Removendo linhas de um arquivo com "ed", ele modifica o arquivo, veja outras opes neste documento que preserva o original, ou faa copia do arquivo antes de iniciar o uso do "ed", neste exemplo um arquivo de log do squid, access.log, contando a linhas do arquivo: [zago@faqcl9 tmp]$ wc -l access.log 64626 access.log ed - arquivo.txt >/dev/null <<! g.palavra da linha a deletar.d . w q !

Tem que entrar com uma linha por vez, neste exemplo vou remover do arquivo access.log todas as linhas que contenha a palavra gator, pra isto execute a primeira linha e vai aparecer o sinal > (prompt) continue digitando.... uma linha por vez assim: ed - access.log >/dev/null <<! g.gator.d . w q ! no final voce tem este resultado no terminal: [root@faqcl9 tmp]$ ed - access.log >/dev/null <<! > g.gator.d > . > w > q > ! [zago@faqcl9 tmp]$ wc -l access.log 63976 access.log [zago@faqcl9 tmp]# wc -l access.log 63976 access.log ******************************************************** Caracteres especiais precisa acrescentar uma \ antes do simbolo, por exemplo, pra trocar todos os .(ponto) por _(underline) a expresso em sed: sed "s/\./_/g" arquivooriginal > arquivotroca Ou com tr: tr . _ < arquivo ******************************************************** Este script acrescenta terminao no nome do arquivo, por exemplo, pra acrescentar .old em todos os arquivos .txt do diretrio corrrente: [root@ufla teste2]# cat teste2 #!/bin/bash for arq in *.txt ; do novo=`basename "$arq".old` mv "$arq" "$novo" done ******************************************************** SED - trocar, substituir palavra ou strings(palavras) dentro de um arquivo. sed = Stream Editor. sed uma ferramenta poderosa pra manipular arquivos, muito til e pratica pra utilizar em scripts ou linha de comando sem precisar de

usar um editor de texto abrir o arquivo, alterar e salvar. Com o sed d pra fazer alterar arquivos como se faz com o "vim", com a diferena que no vim voc precisa acessar o arquivo para alterar enquando que o sed se faz isto em linha de comando... sed "s/stringoriginal/stringtroca/g" arquivooriginal > arquivotroca onde: stringoriginal = a palavra ou string que procura pra troca. stringtroca = a palavra ou string que existir no novo arquivo arquivooriginal = arquivo existente que ser preservado intacto. arquivotroca = novo arquivo com as alteraes. Por exemplo: [root@ufla tmp]# vi arquivo.txt [root@ufla tmp]# cat arquivo.txt Neste arquivo tem zago, com o comando sed todas as ocorrencias da palavra zago sero modificadas pra Antonio Francisco Zago, compare os dois arquivos. [root@ufla tmp]# sed "s/zago/Antonio Francisco Zago/g" arquivo.txt > arquivomodi ficado.txt [root@ufla tmp]# cat arquivomodificado.txt Neste arquivo tem Antonio Francisco Zago, com o comando sed todas as ocorrencias da palavra Antonio Francisco Zago sero modificadas pra Antonio Francisco Zago, compare os dois arquivos. No exemplo acima o sed modificou o contedo do arquivo, onde encontrou a palavra "zago" fez a substituio por "Antonio Francisco Zago" sem precisar usar um editor de texto pra abrir o arquivo fazer a troca e salvar, em uma nica linha de comando o sed executou esta tarefa em todo o arquivo. Exemplo pra remover palavras ou strings de um documento. [root@ufla tmp]# sed "s/zago//g" arquivo.txt > arquivomodificado.txt [root@ufla tmp]# cat arquivomodificado.txt Neste arquivo tem o nome , com o comando sed todas as ocorrencias da palavra sero modificadas pra Antonio Francisco Zago, compare os dois arquivos. No exemplo acima no foi indicado string, ela est vazia, portanto a palavra "zago" foi removida (substituida por um campo vazio), veja que tambm case sensitive, Zago com Z maiusculo no foi substituido. veja mais sobre o uso do sed em: http://www.zago.eti.br/sed.txt Com "vi" tambm faz esta substituio, pode se fazer no prprio arquivo vim '+%s/string1/string2/g' '+wq' arquivo.txt veja como fica o arquivo.txt aps a linha de comando abaixo. vim '+%s/zago/Antonio Francisco Zago/g' '+wq' arquivo.txt [root@ufla tmp]# cat arquivo.txt Neste arquivo tem Antonio Francisco Zago, com o comando sed todas as ocorrencias da palavra Antonio Francisco Zago

sero modificadas pra Antonio Francisco Zago, compare os dois arquivos. obs. foi utilizado o mesmo texto pro sed, antes das alteraes, no texto acima aparece a referencia ao sed mas ele no foi utilizado nesta converso. ******************************************************** REMOVER LINHAS DE UM ARQUIVO. :1,$ s /procure/troque/g :1,$ s /procure/troque/g ******************************************************** Diferenas entre dois arquivos. diff arq1 arq2 Ou com separao por colunas. diff -y --suppress-common-lines squidz.conf squidt.conf | tr -d '\011' | tr -d ' ' Ou diff -y --suppress-common-lines squidz.conf squidt.conf | tr -d '\011' ******************************************************** De: joaquim abc <joaquim-abc@jamef.com.br> Para: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)Maiuscula para Minuscula Data: Fri, 9 Jul 2004 16:36:22 -0300 Em Qui 08 Jul 2004 19:48, Reinaldo de A. Bonilho escreveu: > Boa Noite PessALL, > > Alguem tem um scritp que transforme arquivos e > diretrios Maiusculos para Minusculos ??? > Eu faria assim: find (diretorio) | while read JA do test "$JA" = '.' && continue ja=`echo $JA | tr "[:upper:]" "[:lower:]"` mv "$JA" "$ja" done Acho que em condioes normais de temperatura e pressao, funcionaria. Faa o seu !!!! joaquim abc ******************************************************** De: claudio@conectiva.com Para: Brunhara <lista-linux@sangiovanne.com.br> Cc: Linux-Br <linux-br@bazar2.conectiva.com.br> Assunto: Re: (linux-br) Trocar ponto por trao CL10 Data: Thu, 5 Aug 2004 13:58:31 -0300 (BRT) On Wed, 4 Aug 2004, Brunhara wrote:

> exemplo, eduardo.autotec gostaria de trocar por _ ficando > eduardo_autotec eu gerei uma lista dos usuarios e apartir desta > lista eu quero gerar uma com as alteroes. tr . _ < lista ******************************************************** De: Marcos R. Pawloski <marcos@realsystems.com.br> Para: claudio@conectiva.com, joaquim abc <joaquim-abc@jamef.com.br> Cc: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)Maiuscula para Minuscula Data: Sun, 18 Jul 2004 12:18:27 -0300 Mais um pitaco de sugesto: ---------------------- cut -------------------------------------#!/bin/sh # Tabajara's power muditor plus if [ $# = 0 ] then echo "Muda o nome de um arquivo e diretorio para minuscula. Uso: ./muda [nome...]" exit fi for NOME in $* do NNOME=`echo $NOME | tr '[A-Z]' '[a-z]'` if ! [ -f $NNOME ]; then mv $NOME $NNOME fi done ---------------------- cut -------------------------------------Se executar um ./muda.sh * muda tudo que estiver no diretrio corrente... (8-M > > Alguem tem um scritp que transforme arquivos e > > diretrios Maiusculos para Minusculos ??? > Eu faria assim: > > find (diretorio) | while read JA > do > test "$JA" = '.' && continue > ja=`echo $JA | tr "[:upper:]" "[:lower:]"` > mv "$JA" "$ja" > done > > Acho que em condioes normais de temperatura e pressao, funcionaria. Eu faria assim: rename 'y/A-Z/a-z/' * ******************************************************** De: Djames Suhanko <dsuhanko@uranet.com.br> Para: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)Script p/ renomear arquivos em lowcase

Data: Thu, 10 Nov 2005 14:58:38 -0200 Poutes ! Esqueci de fechar: ls|while read line; do mv "$line" $(echo $line |tr [[:upper:]] [[:lower:]]); done sorry ! Em Qua 09 Nov 2005 21:52, Djames Suhanko escreveu: > unalias ls > ls|while read line; do mv "$line" $(echo $line |tr [[:upper:]] [[:lower:]]; > done --Djames Suhanko - LinuxUser 158.760 ******************************************************** De: Djames Suhanko <djames.suhanko@gmail.com> Para: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)Renomear arquivos com unicode invlido Data: Tue, 24 Jan 2006 22:25:01 -0200 Ol ! Para remover aberraes de arquivos de download, criei o seguinte script: remover_espaco.sh linha 1- #!/bin/sh linha 2- CONTA=`echo $1|egrep "/|."|wc -c` linha 3- if [ $CONTA -lt 1 ]; then linha 4echo "Use: $0 caminho/dos/arquivos/" linha 5exit 0 linha 6fi linha 7- echo "Voce escolheu remover espacos do seguinte diretorio: \"$1\"" linha 8- echo "Isto esta correto [s/n]?" linha 9- read i linha 10- case $i in linha 11- s) ls $1|while read linha; do mv "$1/$linha" $(echo $1/$linha|tr " (){}[]+" >>>"_"|sed -e 's/_-_/-/g'|sed -e 's/__/_/g'|sed -e 's/\&/_e_/g');done 2>/dev/null ;; linha 12- *) exit 0;; linha 13- esac Na linha 11 voc no quebra, ou seja - aps o tr h um espao e continua em " (aspas) Espero que ajude! Abraos ! Em Tera 24 Janeiro 2006 12:32, Tulio Miranda Barros escreveu: > Ol todos, > > Tenho algumas centenas de arquivos (doc, pdfs e zip) de usurios com > acentos, cedilhas, graus e todo tipo de smbolo (incusive os arquivos > dentro dos zips) que esto agora guardados num diretrio de documentos > pblicos para ser compartilhado com toda a rede.... -Djames Suhanko - LinuxUser 158.760 ********************************************************

De: Manoel Pinho <pinho@uninet.com.br> Para: Tulio Miranda Barros <tmbarros # myrealbox.com> Cc: Linux-Br <linux-br@bazar2.conectiva.com.br> Assunto: Re: (linux-br)Renomear arquivos com unicode invlido Data: Tue, 24 Jan 2006 15:21:26 -0200 Tulio Miranda Barros escreveu: > Tenho algumas centenas de arquivos (doc, pdfs e zip) de usurios com > acentos, cedilhas, graus e todo tipo de smbolo (incusive os arquivos > dentro dos zips) que esto agora guardados num diretrio de documentos > pblicos para ser compartilhado com toda a rede. > > Dependendo do lugar que ele lido, um mesmo arquivo pode ser visto de > vrias formas: > TEORIA DA INELEGIBILIDADE INOVA??ES.ppt (invalid encoding) > TEORIA DA INELEGIBILIDADE INOVA??ES.ppt > TEORIA DA INELEGIBILIDADE INOVA ES.ppt > TEORIA\ DA\ INELEGIBILIDADE\ INOVA\uffff\uffffES.ppt > > E alguns no conseguem acessar e dentro dos zips nao se consegue nem ler > o nome do arquivo. > > Teria uma forma de renomear todos esses arquivos com um script? Altere a linha do arquivo /etc/fstab correspondente partio onde est esse diretrio para usar a opo "iocharset=utf8", como nos exemplos abaixo /dev/hda1 /win vfat umask=0,iocharset=utf8 0 0 /dev/hdc /mnt/cdrom iso9660 user,iocharset=utf8,noauto,ro,exec 0 0 (logicamente altere para o seu caso) Depois monte novamente essa partio. ******************************************************** ********************************************************