Cambio de nombre de archivo masivo desde un archivo de texto

Cambio de nombre de archivo masivo desde un archivo de texto

Tengo una carpeta con aproximadamente 7000 archivos y cada archivo está numerado, por ejemplo, 74857.mkv 74858.mkv, etc.

ingrese la descripción de la imagen aquí

También tengo un archivo de texto que tiene todos los números y nombres de archivo:

En este orden:

ingrese la descripción de la imagen aquí

Me gustaría cambiar el nombre de cada archivo de su número a su nombre; un ejemplo:

74857.mkv > Tomado T01 E01.mkv

74858.mkv > Tomado T01 E02.mkv

Cualquier comando para hacer esto, por favor. Lo he estado haciendo manualmente y solo logré hacer 50 archivos en 5 días.

Respuesta1

Asumiendo que"es un ejemplo de nombre"es la cadena en la línea inmediatamente encima del .mkvnombre del archivo actual, es decir, el dado

$ cat file.txt 
Taken S01 E01
74857.mkv
Taken S01 E02
74858.mkv

realmente quieres

74857.mkv > Tomado T01 E01.mkv

74858.mkv > Tomado T01 E02.mkv

luego con GNU parallely mv:

parallel -N2 echo mv -- {2} {1}.mkv < file.txt

Elimine el echouna vez que esté satisfecho de que está componiendo los comandos correctos.

Respuesta2

Si fuera tú, los haría en lotes pequeños y los probaría con una copia, pero algo como esto debería servirte.

while read n; do read f; mv $f "$n.${f##*.}"; done < file

Antes de comenzar, le recomendamos que compruebe el resultado de

while read n; do read f; echo mv $f "$n.${f##*.}"; done < file > checkfile

Para asegurarse de que no haya errores en el cambio de nombre del archivo.

Es más seguro si tiene el espacio y el tiempo para copiar y mantener sus originales seguros hasta que esté satisfecho....

while read n; do read f; cp $f "/a/safe/location/$n.${f##*.}"; done < file

Nota

Para revertir el proceso solo necesitas invertir el orden de los nombres en el mvcomando

mv "$n.${f##*.}"  $f

Respuesta3

Con perl:

perl -lne '$dst = "$_.mkv"; $src = <>; chomp $src; rename $src, $dst
  or warn "$src -> $dst: $!\n"' your-file

Con zsh:

zmodload zsh/files # to get a builtin mv
while IFS= read -ru3 dst && IFS= read -ru3 src; do
   mv -- "$src" "$dst.mkv"
done 3< your-file

información relacionada