
Tengo una carpeta con aproximadamente 7000 archivos y cada archivo está numerado, por ejemplo, 74857.mkv 74858.mkv, etc.
También tengo un archivo de texto que tiene todos los números y nombres de archivo:
En este orden:
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 .mkv
nombre 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 parallel
y mv
:
parallel -N2 echo mv -- {2} {1}.mkv < file.txt
Elimine el echo
una 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 mv
comando
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