2009/2/12 Julio C. Neves <julio.ne...@gmail.com> > Já que a brincadeira é fazer one liners, veja se esse funciona: > > paste <(ls *02*) <(ls *02* | sed 's/02/03/') | xargs -tL1 mv > > o -t em -tL1 é só para mostrar o que ele está fazendo. Se for trocado > por-p, ficará > interativo e pedirá confirmação antes de mover. Quem não entendeu, > leia aqui< > https://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo011#Substitui_o_de_processo > >ou > aqui< > https://twiki.softwarelivre.org/TWikiBar/TWikiBarBirinaite#Passando_par_metros_com_xargs > >. > Está em português e a leitura é fácil. > -- > Abração, > Julio > *Cursos de Shell e Zenity nos finais de semana: > - Em SP ligue (11) 2125-4747; > - Em DF ligue (61) 3223-3000; > - No RJ brevemente; > - Turmas fechadas em outras cidades ligue (21) 8112-9988 > * > 2009/2/11 Ivan lopes <lopesivan....@gmail.com> > > > * problema: > > dado os arquivos, substituir o valor 02 por 03. > > > > $ ls *.txt > > xml-xmllint-sample-validate-02-00.txt > > xml-xmllint-sample-validate-02-note.xml.txt > > xml-xmllint-sample-validate-02-note.dtd.txt > > xml-xmllint-sample-validate-02-note.xsd.txt > > > > * forma normal de resolver o problema: > > $ mv xml-xmllint-sample-validate-02-00.txt > > xml-xmllint-sample-validate-03-00.txt > > $ mv xml-xmllint-sample-validate-02-note.xml.txt > > xml-xmllint-sample-validate-03-note.xml.txt > > $ mv xml-xmllint-sample-validate-02-note.dtd.txt > > xml-xmllint-sample-validate-03-note.dtd.txt > > $ mv xml-xmllint-sample-validate-02-note.xsd.txt > > xml-xmllint-sample-validate-03-note.xsd.txt > > > > * forma ninja! ou Julhesca! ==> ( adjetivo relativo ao cara muito bom em > > Shell ) > > > > hum! vejamos, > > - dupliquei a entrada : 'p' > > - substitui `02' por `03' : 's/02/03/' > > - adicionei mv na frente da linha :'s/^/mv /' > > - removi os fins de linha :'N;s/\n/ /' > > > > moleza! sed nele! > > $ ls *.txt| sed 'p; s/02/03/' | sed 'N;s/\n/ /; s/^/mv /' > > mv xml-xmllint-sample-validate-02-00.txt > > xml-xmllint-sample-validate-03-00.txt > > mv xml-xmllint-sample-validate-02-note.dtd.txt > > xml-xmllint-sample-validate-03-note.dtd.txt > > mv xml-xmllint-sample-validate-02-note.xml.txt > > xml-xmllint-sample-validate-03-note.xml.txt > > mv xml-xmllint-sample-validate-02-note.xsd.txt > > xml-xmllint-sample-validate-03-note.xsd.txt > > > > para que um texto vire uma acao! `sh' nele! > > > > $ ls *.txt| sed 'p; s/02/03/' | sed 'N;s/\n/ /; s/^/mv /'| sh > > > > !!-Atencao-!! > > o bacana desse exemplo, eh que vc pode colocar uma regex no lugar do > > `02' ... entao qualquer tipo de substituicao pode acontecer. > > > > ***transformando essa dica em algo util! <<--- achou que eu tinha > > esquecido! > > $ cat rename.sh > > #!/bin/bash > > > > REGEX=$1 > > _STR_=$2 > > # ---------------------------------------------------------- > > cat -| > > sed "p; s/$REGEX/$_STR_/" | sed 'N;s/\n/ /; s/^/mv /' > > > > # ---------------------------------------------------------- > > exit 0 > > > > Uso: > > $ ls *.txt| ./rename.sh java c++ > > mv xml-xmllint-sample-java-03-00.txt xml-xmllint-sample-c++-03-00.txt > > mv xml-xmllint-sample-java-03-note.dtd.txt > > xml-xmllint-sample-c++-03-note.dtd.txt > > mv xml-xmllint-sample-java-03-note.xml.txt > > xml-xmllint-sample-c++-03-note.xml.txt > > mv xml-xmllint-sample-java-03-note.xsd.txt > > xml-xmllint-sample-c++-03-note.xsd.txt > > > > []'s > > Ivan! :) >
Mais uma forma. Esta é bash puro! for i in *02*; do echo mv ${i} ${i/02/03}; done -- Fabiano Caixeta Duarte Especialista em Redes de Computadores Linux User #195299 Ribeirão Preto - SP [As partes desta mensagem que não continham texto foram removidas]