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

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

Re: [shell-script] Organizar nomes


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Organizar nomes
Date: Fri, 11 Jul 2008 16:39:52 -0300

A solução pode ser um one liner maneiro

$ ls -1
00 - arquivo00
01 - arquivo01
02 - arquivo02
03 - arquivo03
04 - arquivo04
05 - arquivo05
06 - arquivo06
07 - arquivo07
08 - arquivo08
09 - arquivo09
10 - arquivo10

posso usar o sed assim:
$ ls | sed -r "s/^[0-9 -]+(.*)/'&' '\1'/"
'00 - arquivo00' 'arquivo00'
'01 - arquivo01' 'arquivo01'
'02 - arquivo02' 'arquivo02'
'03 - arquivo03' 'arquivo03'
'04 - arquivo04' 'arquivo04'
'05 - arquivo05' 'arquivo05'
'06 - arquivo06' 'arquivo06'
'07 - arquivo07' 'arquivo07'
'08 - arquivo08' 'arquivo08'
'09 - arquivo09' 'arquivo09'
'10 - arquivo10' 'arquivo10'

Ai basta mandar pro xargs + mv
$ ls | sed -r "s/^[0-9 -]+(.*)/'&' '\1'/"  | xargs -L 1  mv -v
`00 - arquivo00' -> `arquivo00'
`01 - arquivo01' -> `arquivo01'
`02 - arquivo02' -> `arquivo02'
`03 - arquivo03' -> `arquivo03'
`04 - arquivo04' -> `arquivo04'
`05 - arquivo05' -> `arquivo05'
`06 - arquivo06' -> `arquivo06'
`07 - arquivo07' -> `arquivo07'
`08 - arquivo08' -> `arquivo08'
`09 - arquivo09' -> `arquivo09'
`10 - arquivo10' -> `arquivo10'

verificando o resultado
$ ls
arquivo00  arquivo01  arquivo02  arquivo03  arquivo04  arquivo05
arquivo06  arquivo07  arquivo08  arquivo09  arquivo10

Não custa tentar :)

2008/7/9 Guilherme Gall <address@hidden>:
> 2008/7/9 Flamarion Jorge <address@hidden>:
>> Bacana mas seria legal eu saber o que exatamente isso faz heheheheh
>
> O comando s do sed é igual a esse do rename. Uma boa literatura sobre
> isso são os primeiros tópicos da página
> http://www.grymoire.com/Unix/Sed.html. Destaque para o tópico que fala
> sobre retrovisores ("Using \1 to keep part of the pattern"). No
> comando que te passei o retrovisor era '$1' e não '\1', mas o
> funcionamento é o mesmo.
>
> O resto é regex. Um bom ponto de partida sobre o assunto é
> http://aurelio.net/er/
>
>> O caminho que eu tava seguinto tava errado?
>
> No comando que você mandou na primeira mensagem, o que você estava
> fazendo era filtrar a listagem de arquivos do diretório apenas. Para
> renomear os arquivos sem o uso do rename, poderia ser usado o seguinte
> loop sobre os arquivos do diretório:
>
> for i in *; do
> novonome=$(sed -r 's/[a-z]* [0-9]{2} - (.*)/\1/' <<< $i);
> mv "$i" "$novonome"
> done
>
> Um ótimo material sobre shell para iniciantes pode ser encontrado em
> http://twiki.softwarelivre.org/TWikiBar/WebHome
> O tópico sobre o 'for' está em
> http://twiki.softwarelivre.org/TWikiBar/TWikiBarPapo005
>
> Bom, os links estão aí, agora é com você
>
> Espero ter ajudado,
>
> Guilherme Gall
> 



-- 
Tiago B Peczenyj
Linux User #405772

http://peczenyj.blogspot.com/
"what does not kill us makes us stronger"


reply via email to

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