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: Fabiano Caixeta Duarte
Subject: Re: [shell-script] Dica do Ivan (renomear arquivos)
Date: Fri, 13 Feb 2009 00:41:50 -0200

2009/2/12 Julio C. Neves <address@hidden>

> 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>
>
> >   * 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]



reply via email to

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