¿Cómo puedo cambiar el nombre de muchos archivos usando una expresión regular?

20

Quiero cambiar el nombre de muchos archivos en Mac OS X (10.7.2). No tengo el paquete perl para el renamecomando.

Mis archivos tienen nombres como "T452-102456-0.png" y quiero eliminar la parte "-0". Sé que puedo hacer esta acción escribiendo mi propio script php-cli, pero me gustaría conocer una solución más fácil y rápida.

Raphaël
fuente
¿No existe una contradicción lógica entre “muchos archivos pdf” y “Mis archivos tienen nombres como" T452-102456-0.png "”?
manatwork el
Oh ... el tipo de archivos no importa, pero es cierto ^^. Edito, gracias por tu comentario =)
Raphaël

Respuestas:

21

Bash o Ksh junto con mvpodrían resolverlo:

for f in *.png; do mv -n "$f" "${f/-0}"; done

En caso de que el nombre del archivo también tenga "0" después del primer guión y el "-0" esté siempre delante del punto, puede incluir ese punto también en la expresión:

for f in *.png; do mv -n "$f" "${f/-0./.}"; done

Pero como esa regla de cambio de nombre es simple, si tiene renameel paquete util-linux , eso también lo hará:

rename '-0.' '.' *.png
hombre trabajando
fuente
Funciona perfectamente. Muchas gracias =)
Raphaël
3

Método simple: archivos en el directorio actual solamente

Con zsh:

autoload zmv
zmv '(*)-0(.png)' '$1$2'

Con otras conchas:

for x in *-0.png; do mv -- "$x" "${x%-0.*}.png"; done


Método mejorado: archivos en el directorio actual y / o subdirectorios

Con zsh:

zmv '(**/)(*)-0(.png)' '$1$2$3'

Con ksh93:

set -o globstar
for x in **/*-0.png; do mv -- "$x" "${x%-0.*}.png"; done

Con bash ≥4, como arriba, pero use en shopt -s globstarlugar del setcomando.

Con otras conchas:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +
Gilles 'SO- deja de ser malvado'
fuente
Otra gran razón para instalar zsh:) .... zmv
danidee
2

En Fish Shell en OSX:

for f in *.png; mv -n $f (basename $f -0.png).png; end

Concha de pescado: https://fishshell.com/

jeffmcneill
fuente
2
Y downvote por qué razón? Esta es una respuesta válida a la pregunta.
jeffmcneill
0

Si tienes el mmvpaquete:

mmv '*-0.png' '#1.png'

Al igual que (versiones recientes de) rename, esto tendrá mucho cuidado para evitar sobrescribir los archivos existentes.

Toby Speight
fuente