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

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

Re: [shell-script] Re: Renomear arquivos em cadeia em um diretório


From: Fábio Batista
Subject: Re: [shell-script] Re: Renomear arquivos em cadeia em um diretório
Date: Wed, 19 Jan 2005 19:23:59 -0300

Pô, depois desse texto todo, apenas um "Obrigado"?

Quero ouvir comentários :)

Fábio David Batista
address@hidden
http://nerd-o-matic.blogspot.com

On Wed, 19 Jan 2005 19:17:15 -0000, oteb_04 <address@hidden> wrote:
>  
>  Obrigado
>  
>  []
>  Beto
> 
>  
>  
>  
>  --- Em address@hidden, Fábio Batista
>  <fabio.david.batista@g...> escreveu
>  > Claro.
>  > 
>  > O principal pra chegar em linhas de comando menores e evitar os FOR e
>  > excesso de pipes da vida é conhecer a fundo o que fazem os principais
>  > comandos do shell, principalmente os mais complicados e cheios de
>  > funcionalidade, como o SED e o FIND - meus preferidos.
>  > 
>  > Uma coisa que pode-se pensar também, às vezes, é em "gerar um novo
>  > script". É o que essa solução que eu enviei faz: ela não chama o
>  > comando MV várias vezes - ao invés disso, ela gera um script que é
>  > executado em um subshell, através do pipe com o SH.
>  > 
>  > Agora, explicando essa solução: ao ler o enunciado, percebi que todas
>  > as transformações que o nosso amigo EOAC precisava realizar nos nomes
>  > de arquivo podiam ser realizadas por um único comando SED. Então parti
>  > pra essa solução, e cheguei ao resultado dos nomes de arquivo que ele
>  > queria.
>  > 
>  > Então, incrementei um pouco mais o SED para ele gerar os comandos MV
>  > necessários para renomear os arquivos. O comando do SED ficou, então,
>  > assim:
>  > 
>  > # padrão p/ busca (espaços adicionados p/ fins de clareza):
>  > ( [0-9]{3} _ ) ( .* ) 
>  > # captura dois grupos:
>  > # grupo 1: três números seguidos de um underscore
>  > # grupo 2: o restante da string
>  > 
>  > # substituição:
>  > mv \0 \L\2
>  > # 'mv ': escreve 'mv'
>  > # '\0 ' escreve a string inteira capturada (grupo zero), ou seja, o
>  > nome do arquivo inteiro
>  > # '\L': converte os próximos caracteres em minúsculas (comando do SED)
>  > # '\2': escreve apenas a parte da string capturada no grupo 2.
>  > 
>  > 
>  > Em geral, fica a dica: se seu script começar a ter muito CAT, LS,
>  > FIND, FOR, READ, GREP, TR, CUT, SED, HEAD e TAIL misturados, verifique
>  > se não é possível trocar tudo por um ou vários SEDs e FINDs.
>  > Normalmente é possível e recomendável.
>  > 
>  > Fábio David Batista
>  > fabio.david.batista@g...
> 
>  > http://nerd-o-matic.blogspot.com
>  > 
>  > On Wed, 19 Jan 2005 16:00:13 -0000, oteb_04 <hpfn@i...> wrote:
>  > >  
>  > >  --- Em address@hidden, Fábio Batista
>  > >  <fabio.david.batista@g...> escreveu
>  > >  > [fabio@elefante arquivos]$ ls -l
>  > >  > total 0
>  > >  > -rw-r--r--  1 fabio suprifattus 0 Jan 19 13:17 112_12345.BMP
>  > >  > -rw-r--r--  1 fabio suprifattus 0 Jan 19 13:17 115_12345.BMP
>  > >  > -rw-r--r--  1 fabio suprifattus 0 Jan 19 13:17 122_12345.BMP
>  > >  > -rw-r--r--  1 fabio suprifattus 0 Jan 19 13:17 123_12345.BMP
>  > >  > 
>  > >  > [fabio@elefante arquivos]$ ls | sed -r 's/([0-9]{3}_)(.*)/mv \0
>  \L\2/'
>  > >  > mv 112_12345.BMP 12345.bmp
>  > >  > mv 115_12345.BMP 12345.bmp
>  > >  > mv 122_12345.BMP 12345.bmp
>  > >  > mv 123_12345.BMP 12345.bmp
>  > >  > 
>  > >  > Depois disso, basta fazer o pipe com o sh, para executar os
>  comandos:
>  > >  > ls | sed -r 's/([0-9]{3}_)(.*)/mv \0 \L\2/' | sh
>  > >  > 
>  > >  Ia enviar um terceiro email com o script completo, já que mesmo
>  > >  o segundo, assim com o primeiro, estava na verdade sem dar uma
>  > >  solução.
>  > >  Mas achei essa linha deixando o loop for que fiz um tanto arcaico.
>  > >  
>  > >  #!/bin/bash 
>  > >  ls|grep .BMP > teste.sh
>  > >  ls|grep .BMP|tr -s 'BMP' 'bmp'|sed 's/.*_//g' > teste1.sh
>  > >  
>  > >  x=1
>  > >  for i in `cat teste.sh`
>  > >  do
>  > >          X=$(sed -n /$x/p teste1.sh)
>  > >          mv $i  $X
>  > >          ((x++))
>  > >  done
>  > >  
>  > >  Fábio, dá para explicar a linha de comando com mai detalhes?
>  > >  
>  > >  abraço
>  > >  Beto
>  > >  
>  > >  
>  > >  
>  > >  
>  > > 
>  > >  ---------------------------------------------------------------------
>  > >  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: address@hidden
>  > >  ---------------------------------------------------------------------
>  > >  Esta lista é moderada de acordo com o previsto em
>  > > http://www.listas-discussao.cjb.net
>  > >  ---------------------------------------------------------------------
>  > >  
>  > >  
>  > > 
>  > >  
>  > >  
>  > >  Yahoo! Grupos, um serviço oferecido por: 
>  > >  
>  > >  
>  > >  
>  > >  
>  > >  
>  > >  
>  > >  ________________________________
>  > >  Links do Yahoo! Grupos
>  > >  
>  > > Para visitar o site do seu grupo na web, acesse:
>  > > http://br.groups.yahoo.com/group/shell-script/
>  > >   
>  > > Para sair deste grupo, envie um e-mail para:
>  > > address@hidden
>  > >   
>  > > O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
>  Serviço do
>  > > Yahoo!.
>  
>  
>  
>  
> 
>  ---------------------------------------------------------------------
>  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: address@hidden
>  ---------------------------------------------------------------------
>  Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
>  ---------------------------------------------------------------------
>  
>  
> 
>  
>  
>  Yahoo! Grupos, um serviço oferecido por: 
>  
>  
>  
>  
>  
>  
>  ________________________________
>  Links do Yahoo! Grupos
>  
> Para visitar o site do seu grupo na web, acesse:
> http://br.groups.yahoo.com/group/shell-script/
>   
> Para sair deste grupo, envie um e-mail para:
> address@hidden
>   
> O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do
> Yahoo!.


reply via email to

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