Cambiar el nombre de los archivos agrega guiones después del cuarto y sexto carácter

Cambiar el nombre de los archivos agrega guiones después del cuarto y sexto carácter

Tengo algunos archivos como:

20150716_something-here
20150716_something-heretoo
20150716_something-hereaswell

Deben renombrarse como

2015-07-16_something-here
2015-07-16_something-heretoo
2015-07-16_something-hereaswell

Intenté usar unimplementación de perldelrenamedominio(vea mi comentario sobre la respuesta aceptada) pero no tuve éxito.

Respuesta1

Usando la expansión de subcadena incorporada de bash:

for f in 2015* ; do
  mv "$f" "${f::4}-${f:4:2}-${f:6}"
done

Respuesta2

Con sed:

LC_ALL=C sed -e 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1_\2_\3/' <file

Respuesta3

Si bien renamees una herramienta muy poderosa, normalmente prefiero la simplicidad delmmvUtilidad (múltiples movimientos):

mmv '????????_*' '#1#2#3#4-#5#6-#7#8_#9'

El ?en el patrón de búsqueda representa un solo carácter, el *una secuencia de caracteres arbitrariamente larga. En el patrón de reemplazo, cada #<number>representa un correspondiente ?o *en el patrón de búsqueda. Además de ?y *, mmvadmite rangos de caracteres entre paréntesis (como [a-f]).

( mmvProbará si hay conflictos al cambiar el nombre antes de comenzar a funcionar, por lo que no corre el riesgo de perder archivos al sobrescribirlos).

Respuesta4

En mi distribución tengo el perl-renamecomando, que puede usar una expresión regular estilo Perl para cambiar el nombre de los archivos de forma masiva. El renamecomando solo acepta un par de cadenas fijas para cambiar el nombre.

información relacionada