Existe um comando Perl rename
que deve fazer o truque. Cuidado, porém: existem vários comandos diferentes chamados rename
, então tenha certeza de ter o script Perl que espera um perlexpr
como argumento. Este é o comando rename
fornecido pelo pacote perl
no Debian e derivados (Ubuntu, Mint,…), mas não em outras distribuições que podem ter um utilitário diferente chamado rename
.
martin@martin ~/test % touch a.txt
martin@martin ~/test % touch b.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt
Como você pode ver, é idempotente - ele não adicionará o prefixo novamente quando você o chamar várias vezes.
Ele funciona substituindo o início (zero-length) das strings ( ^
) ou o início seguido por uma string prefix
opcional com prefix
.
Deixarei de encapsular isso em um shell script ou em uma função shell como um exercício para você:)
O postfix é um pouco mais difícil, porque você tem que descobrir qual parte do nome do arquivo constitui a extensão ...