¿Cómo puedo cambiar el nombre de una lista ordenada de archivos con una lista ordenada de nombres de archivo?

Tengo una serie de archivos. Necesito aplicar una serie de nombres de archivo.

Entonces,

  • 001.jpg -> manzana.jpg
  • 002.jpg -> plátano.jpg
  • 003.jpg -> naranja.jpg
  • etc.

Tendré que repetir esto para cada una de las 16 carpetas con 292 archivos por carpeta. Los archivos siempre estarán en el orden numerado correcto, pero no siempre con los mismos nombres (la primera serie será 001.jpg-292.jpg, luego 293.jpg-584.jpg, etc.). Los nombres proporcionados serán los mismos para los archivos en las 16 carpetas.

Veo que esto es posible (¡y bastante fácil!) con aplicaciones como A Better Finder Rename , pero no estoy interesado en gastar los $20 en todas esas funciones solo para hacer una cosa que no espero tener. para hacer de nuevo :D

Entonces, ¿hay algún tipo de opción gratuita, como Automator, un Applescript o un script de shell?

Encontré varios scripts de shell que repiten la misma acción para todos los archivos, pero no sé lo suficiente como para editarlos y proporcionar un nuevo nombre para cada operación de cambio de nombre. :(

Incluso si tengo que hacer un script de más de 292 líneas, codificando la lista de nombres en él, ¡sería más fácil que renombrarlos manualmente en el buscador uno por uno!

Respuestas (2)

Por ejemplo, guarde este archivo como filenames.txt:

apple
banana
orange

Luego abre la Terminal y ejecuta:

a=($(<filenames.txt));for d in *;do i=0;for f in $d/*;do echo mv $f $d/${a[i++]}.jpg;done;done

Eliminar echosi la salida se ve bien.

Si los nombres de archivo contienen espacios, agréguelos IFS=$'\n';al inicio y agregue comillas dobles alrededor de las variables.

¡Gracias! Esto casi funciona. ¡El único problema es que usa el primer nombre en filenames.txt para los 292 archivos! …¿algunas ideas?
¿Cambió el directorio de trabajo a la carpeta que contiene las otras carpetas? O si necesita ejecutar el script en cada carpeta por separado, elimine la for d in *;parte y ;donedesde el final.
Edité el comando y terminé con un resultado como "mv 001.jpg apple.jpg; mv 002.jpg apple.jpg; mv 003.jpg apple.jpg…", etc.

Que he hecho:

  • Pegue la lista de nombres antiguos en la segunda columna de una hoja de cálculo.
  • Pegue la lista de nuevos nombres en la tercera columna.
  • verificar que la coincidencia de pares sea correcta
  • poner mven cada celda de la primera columna
  • si algún nombre de archivo contiene espacios, escápelos con\
  • pegar todo el contenido de la hoja de cálculo en un script
  • si no usa zsh, cambie todas las pestañas al espacio
  • chmod o+xen el guion
  • ejecutar el script
Fresco. Dos respuestas, y la que realmente funciona recibe un voto negativo.