En su caso específico, puede usar el siguiente bashcomando ( bashes el shell predeterminado en macOS):
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
Nota: Si existe la posibilidad de que sus nombres de archivo comiencen con -, coloque -- antes de ellos [1]:
mv -- "$f" "${f/_*_/_}"
Nota: echose antepone a mvpara realizar un ensayo. Elimínelo para realizar un cambio de nombre real.
Puede ejecutarlo desde la línea de comandos o usarlo en un script.
"${f/_*_/_}"es una aplicación de bash expansión de parámetros : el (primer) patrón de coincidencia de subcadenas _*_se reemplaza con literal _, cortando efectivamente el token del medio del nombre.
- Tenga en cuenta que
_*_es un patrón (una expresión comodín, como también se usa para globbing), no una expresión regular (para aprender sobre patrones, ejecutar man bashy buscar Pattern Matching).
Si tiene que cambiar el nombre de los archivos por lotes con frecuencia, considere instalar una herramienta especializada como la renameutilidad basada en Perl . En macOS, puede instalarlo utilizando el popular administrador de paquetes Homebrew de la siguiente manera:
brew install rename
Aquí está el equivalente del comando en la parte superior usando rename:
rename -n -e 's/_.*_/_/' *.png
Nuevamente, este comando realiza una ejecución en seco; eliminar -npara realizar el cambio de nombre real.
- De forma similar a la
bashsolución, s/.../.../realiza la sustitución de texto, pero, a diferencia de lo que bashocurre con las expresiones regulares verdaderas, se utilizan.
[1] El propósito de argumento especial --, que está soportado por la mayoría de los servicios públicos, es de señalar que los argumentos posteriores deben ser tratados como los operandos (valores), incluso si se ven como opciones debido a que empiecen con -, como Jacob C. notas.