Modificar parte del nombre de archivos masivamente.

Imagen de omar155
0 puntos

A ver si me puedo explicar correctamente.

En una carpeta tengo archivos nombrados de esta forma:
[nombre1][nombre2].JPG

Necesito añadir la nombre3 en todos los archivos:
[nombre1][nombre3][nombre2]...[].JPG

La consulta es, ¿Cómo puedo modificar masivamente archivos de esta manera?

Muchas gracias por la atención,

Un saludo.

Imagen de joseluis
+1
0
-1

Entiendo que nombre1, nombre2 y nombre3 son literales fijos ¿no?
Si fuera así una forma muy sencilla sería utilizar sed para sustituir nombre1nombre2 por nombre1nombre3nombre2. La instrucción (junto al mv para renombrar el fichero) dentro de un bucle que te coja los ficheros que quieres renombrar te debería solucionar el problema.

	for i in nombre1nombre2*.[Jj][Pp][Gg] ; do
		mv "${i}" "$(echo $i | sed "s/^nombre1nombre2/nombre1nombre3nombre2/g")"
	done

Las comillas " con ${i} es para que no de problemas si el nombre del fichero contiene espacios.
El ^ que va dentro del sed es para indicar que el literal nombre1nombre2 va al comienzo del nombre (es decir si tuvieras un fichero que se llamara otracosanombre1nombre2ymas.JpG no te lo cambiaría (si te da lo mismo donde pueda aparecer nombre1nombre2 entonces quita el ^ del sed).
El poner la "extensión" con [Jj][Pp][Gg] es para no tener problemas con mayúsculas o minúsculas.

+1
0
-1

Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

Imagen de KIKERAP
+1
0
-1

A mi entender no son fijos los nombre1 y nombre2, mientras que nombre3 si.
Otra cosa, los nombres de los archivos son entre corchetes, como has puesto , o es meramente infromativo ?
Por favor aclara eso, o pon ejemplo reales jeje .

Saludos

+1
0
-1
Imagen de joseluis
+1
0
-1

Algo fijo debería tener, ya sean los propios literales, o la longitud de los mismos o algún carácter fijo que separe las dos cadenas.

Si la longitud de nombre1 fuera fija, por ejemplo sabes que se trata de una cadena de longitud 10, entonces el renombrado es algo tan simple como:

	for i in *.[Jj][Pp][Gg] ; do
		mv "$i" "${i:0:10}nombre3${i:10}"
	done

Si por el contrario lo que hay es un carácter (por ejemplo el ]) que separa los literales (siendo estos variables), lo que podrías hacer es cortar el nombre con cut:

	for i in *.[Jj][Pp][Gg] ; do
		mv "$i" "$(echo $i | cut -d"]" -f1)][nombre3]$(echo $i | cut -d"]" -f2-)"
	done

Y si no hay ni literales fijos, ni caracteres de separación, ni tamaños fijos pues ya no se como se podría automatizar el renombrado de algo si no existe ningún criterio para el mismo.

+1
0
-1

Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

Imagen de nacho tineo
+1
0
-1

Buenas compañero yo para renombrar archivos (fotos) uso la aplicación metamorphose 2 y me funciona de vicio espero que te valla bien para lo tuyo.
http://file-folder-ren.sourceforge.net/
saludos

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)