[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"