A ferramenta mais fácil aqui seria zsh (como o bash, só que melhor), com seu fancy globbing e o zmv
function . Execute isso no diretório de nível superior onde deseja renomear arquivos.
autoload -U zmv
zmv '(**/)[Ss][Ff][0-9]##-[0-9]##[- ]#(*)' '$1$2'
Explicação: **/
é qualquer sequência de diretórios principais. Em seguida, há um padrão de sf
(insensível a maiúsculas e minúsculas) seguido por um ou mais dígitos, um traço e outro número, seguidos por traços e espaços. Finalmente, pode haver qualquer sufixo *
. Os números na substituição referem-se aos grupos entre parênteses no padrão.
Como alternativa, você pode usar prename
(o script de renomeação baseado em Perl, disponível no Debian e Arch Linux, pode precisar ser instalado separadamente em outras distribuições). Você precisará combiná-lo com find
para reunir a lista de arquivos para renomear. Não importa se rename
é passado em arquivos não correspondentes, ele ignorará arquivos para os quais não há renomeação a ser feita.
find -name '[Ss][Ff]*' -exec prename 's!/!sf[0-9]+-[0-9]+[- ]*!!i' {} +