TL; DR
rename -n 's/^((\w+\.+){3})(.).*\.(.*)\.(.).*\.(.*)\.\-(\..*)$/$1$3$4$5$6$7/' *
-
\w+corresponde a um ou mais caracteres de palavras, ou seja,[a-zA-Z0-9_]+[1] -
\.+corresponde a um ou mais caracteres de ponto (.) [2]Observe que
\.corresponde ao caractere.. Precisamos usar\.para representar., pois.tem um significado especial em regex. O\é conhecido como o código de escape, que restaura o significado literal original do caractere seguinte. -
(\w+\.+){3}corresponde ao máximo de 3 vezes de qualquer precisão acima de [1], [2] grupo de caracteres começando do início (^corresponde ao início dos nomes) do nome dos arquivos.
Isso corresponderá ou retornarámy.program.name.Observe que parênteses extras em torno da regex são usados para agrupamento de correspondência. A correspondência de agrupamento começa com
(e termina com)e é usada para fornecer as chamadas referências . Uma referência anterior contém a subcadeia correspondente armazenada em variáveis especiais $ 1 , $ 2 , … , $ 9 , onde $ 1 contém a substring correspondente ao primeiro par de parênteses e assim por diante. -
.O ponto do metacaractere (.) corresponde a qualquer caractere único. Por exemplo,...corresponde a quaisquer 3 caracteres. então, com esse(.), estamos igualando o primeiro caractere deseason, que és. -
.*\.corresponde a tudo depois de um único caractere acima até primeiro., se visto. Como você pode ver, não o capturamos como um grupo de correspondências porque queremos removê-lo do nosso nome, onde isso corresponde aeason.. -
(.*)corresponde a tudo após a correspondência acima. Isso corresponde aNN. Parênteses usados aqui porque queremos manter isso no nome do arquivo. -
\.corresponde a um único ponto após a correspondência acima. Um.após o primeiroNN. -
(.)novamente com esse estamos igualando o primeiro caractere após a correspondência acima. isso retornará apenase. -
.*\.corresponderá a tudo após a correspondência acima até o primeiro.. Corresponderá apisode.. -
(.*)corresponde a qualquer coisa após o último ponto correspondente da correspondência acima. Isso corresponderá ao segundoNN. -
\.\-corresponde a um ponto.seguido por um traço-. Corresponderá ou retornará.- -
E finalmente
(\..*)$corresponde a um único ponto.e tudo depois disso, que termina no final do nome do arquivo.$corresponde ao final do nome do arquivo ou string de entrada.
Observação: remova a opção -n para realizar renomeação real.