versiones usuario sistemas sistema sierra operativos operativo nombre mac high descargar como casita caracteristicas cambiar macos bash shell file-rename

macos - usuario - sistema operativo mac os x



cambio de nombre de lote de mac os x (7)

Tengo una carpeta con una serie de archivos llamados:

prefix_1234_567.png prefix_abcd_efg.png

Me gustaría eliminar por lotes un guión bajo y el contenido del medio para que la salida sea

prefix_567.png prefix_efg.png

agradecimiento relevante pero no completamente explicativo: ¿cómo puedo cambiar el nombre de los archivos usando el Terminal? Regex para cambiar el nombre de los archivos en el Terminal OS X


En su caso específico, puede usar el siguiente comando bash ( bash es el shell predeterminado en macOS):

for f in *.png; do echo mv "$f" "${f/_*_/_}"; done

Nota: el echo se antepone a mv para realizar una ejecución en seco. Eliminarlo para realizar el cambio de nombre real.

Puede ejecutarlo desde la línea de comando o usarlo en un script.

  • "${f/_*_/_}" es una aplicación de expansión de parámetros bash : el (primer) patrón coincidente de subcadena _*_ se reemplaza por literal _ , cortando efectivamente el token central 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 bash y buscar Pattern Matching ).

Si encuentra archivos de cambio de nombre por lotes con frecuencia, considere una herramienta especializada como la utilidad de rename basada en Perl. En macOS puedes instalarlo usando el popular gestor de paquetes Homebrew siguiente manera: brew install rename

Aquí está el comando equivalente usando rename :

rename -n -e ''s/_.*_/_/'' *.png

De nuevo, este comando realiza una ejecución en seco; eliminar -n para realizar el cambio de nombre real.

  • Similar a la solución bash , s/.../.../ realiza la sustitución de texto, pero a diferencia de bash , se utilizan expresiones regulares verdaderas.

Para cambiar el nombre de los archivos, puede usar la utilidad de rename :

brew install rename

Por ejemplo, para cambiar una cadena de búsqueda en todos los nombres de archivo en el directorio actual:

rename -nvs searchword replaceword *

Elimine el parámetro ''n'' para aplicar los cambios.

Más información: man rename


Puedes usar sed:

ls * | sed -e ''p;s@_.*_@_@g'' | xargs -n2 mv

resultado:

prefix_567.png prefix_efg.png

* para hacer un funcionamiento en seco primero, reemplazar mv al final con echo


Tenía un lote de archivos que se veía así: be90-01.png y necesitaba cambiar el guión para subrayar. Usé esto, que funcionó bien:

for f in *; do mv "$f" "`echo $f | tr ''-'' ''_''`"; done


Usando mmv

mmv ''*_*_*'' ''#1_#3'' *.png


prueba esto

for i in *.png ; do mv "$i" "${i/remove_me*.png/.png}" ; done

Aquí hay otra manera:

for file in Name*.png; do mv "$file" "01_$file"; done


puedes instalar el comando rename usando brew . simplemente brew install rename y brew install rename .