Vamos supor que eu tenha cinco arquivos mp3:
01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
05-trackxyz.mp3
Agora, ouço rapidamente os arquivos (apenas o mplayer no console fará o truque) e descubro que as faixas estão na ordem errada . 05 é realmente 02 e o restante terá que ser renomeado. Então, primeiro farei uma mudança de nome temporário:
01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
00-trackxyz.mp3
Agora precisamos de um "turno": 02 deve se tornar 03, 03 deve se tornar 04 e 04 deve se tornar 05. Para minimizar a confusão, ex-05 (agora 00) será mv
editado mais tarde.
Minha abordagem foi a seguinte: (perl rename
, de Larry Wall, padrão aqui no Debian)
rename 's/0([2-4])([\s\S]+)/0($1+1)$2/' *
bem como (mais tarde, depois de mais alguns RTFM'ing)
rename 's/0([2-4])([\s\S]+)/0($1+1)$2/e' *
Nenhum deles trabalhou, especialmente porque o /e[val]
modificador não aceita qualquer outra coisa , mas avaliações, e irá lançar um erro uma vez que você tentar combinar as avaliações com cordas. O bash
pode fazer isso muito bem, por exemplo, foo$((1+6))
será avaliado como foo7
.
Então, como posso fazer isso (preferencial de uma linha, não pretendendo escrever um script independente inteiro apenas para isso)?