"renomear" é um utilitário que faz exatamente o que você precisa:
rename 's/.mp4//' *.mp4
renomeie para outras informações
Renomei acidentalmente um grande número de meus arquivos com uma extensão .mp4 . Felizmente, a extensão original foi preservada no nome do arquivo (por exemplo, simon.says.nfo.mp4 )
Como eu removerei agora a parte mp4 desses arquivos?
Devido ao sistema de nomenclatura que tenho, não posso simplesmente encontrar um *.*.mp4 , o que seria muito mais fácil com um combo localizar / substituir.
Para remover a extensão .mp4 de todos os arquivos com a extensão .nfo.mp4 no diretório atual:
for fname in ./*.nfo.mp4; do
newfname="$( basename "$fname" .mp4 )"
mv -i "$fname" "$newfname"
done
O utilitário basename remove o caminho (deixa apenas o nome do arquivo) e é capaz de remover um sufixo de uma só vez. Podemos remover o caminho aqui sem adicioná-lo novamente, já que estamos interessados apenas no diretório atual. O efeito equivalente seria obtido usando a expansão do parâmetro newfname="${fname%.mp4}" (que remove o sufixo .mp4 , mas não exclui o caminho inicial de $fname , embora isso não seja um problema aqui).
Estou usando mv -i para que você confirme manualmente qualquer operação mv que, de outra forma, substituiria um arquivo existente.
Para o teste, o seguinte só irá imprimir o que teria acontecido:
for fname in ./*.nfo.mp4; do
newfname="$( basename "$fname" .mp4 )"
printf 'Want to rename "%s" into "%s"\n' "$fname" "$newfname"
## mv -i "$fname" "$newfname"
done