No seu caso específico, você pode usar o seguinte bashcomando ( bashé o shell padrão no macOS):
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
Nota: Se houver uma chance de os nomes dos seus arquivos começarem -, coloque -- diante deles [1]:
mv -- "$f" "${f/_*_/_}"
Nota: echoé anexado a mvpara executar uma execução a seco. Remova-o para executar a renomeação real.
Você pode executá-lo na linha de comando ou usá-lo em um script.
"${f/_*_/_}"é uma aplicação de bash expansão de parâmetro : o (primeiro) padrão de correspondência de substring _*_é substituído por literal _, cortando efetivamente o token do meio do nome.
- Observe que
_*_é um padrão (uma expressão curinga, também usada para globbing), não uma expressão regular (para aprender sobre padrões, executar man bashe procurar Pattern Matching).
Se você renomear arquivos em lote com frequência, considere instalar uma ferramenta especializada, como o renameutilitário baseado em Perl . No macOS, você pode instalá-lo usando o popular gerenciador de pacotes Homebrew , da seguinte maneira:
brew install rename
Aqui está o equivalente ao comando no topo usando rename:
rename -n -e 's/_.*_/_/' *.png
Novamente, este comando executa uma execução a seco; remove -npara executar a renomeação real.
- Semelhante à
bashsolução, s/.../.../executa a substituição de texto, mas - ao contrário de bash- expressões regulares verdadeiras são usadas.
[1] A finalidade do argumento especial --, que é apoiado pela maioria dos serviços públicos, é para sinalizar que os argumentos subsequentes devem ser tratados como operandos (valores), mesmo se eles olham como opções devido a começar -, como Jacob C. notas.