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

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

Re: [shell-script] Dica do Ivan (renomear arquivos)


From: Julio C. Neves
Subject: Re: [shell-script] Dica do Ivan (renomear arquivos)
Date: Fri, 13 Feb 2009 10:13:04 -0200

Essa thread é a prova cabal do que sempre digo:
- Pergunta errada: "Dá para fazer isso aqui em shell?"
- Pergunta correta: "Qual a melhor forma de fazer isso aqui em Shell?"

-- 
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/13 jimmy <address@hidden>

>   On Fri, Feb 13, 2009 at 12:41:50AM -0200, Fabiano Caixeta Duarte wrote:
> > 2009/2/12 Julio C. Neves <address@hidden<julio.neves%40gmail.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 <address@hidden<lopesivan.del%40gmail.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
> >
> >
> > ------------------------------------
>
> apenas para constar,
>
> $ rename 02 03 *
>
> --
> " Não manejo bem as palavras
> Mas manipulo bem as strings."
> ------------------------------
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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