Cambiar el nombre de archivos de una lista de nombres de archivos

Cambiar el nombre de archivos de una lista de nombres de archivos

Todavía soy muy nuevo en los scripts de shell, así que estoy seguro de que este comando es incorrecto. Estoy intentando cambiar el nombre de una carpeta de archivos a los nombres de un archivo de texto. La condición previa es que los nombres de archivo.txt y los archivos de la carpeta ya estén organizados para que coincidan con la primera línea con el primer archivo del sistema. Lo que obtuve fue:

while read line; do echo -e "$line\n" | for f in *mkv do mv f $1; done < filenames.txt

pero no funcionó. ¿Pueden ayudarme a corregirlo?

Gracias

Respuesta1

Si no tiene una regla algorítmica para cambiar el nombre de los archivos (es decir, realmente necesita un archivo como entrada), le sugiero que

  1. cree un archivo txt a partir de la lista de archivos cuyo nombre desea cambiar, por ejemplo:

    encontrar . -nombre "*.mkv" > archivos.txt

  2. edite este archivo y agregue el nuevo nombre después del anterior en cada línea, por ejemplo

    ./miprimer.mkv ./minuevoprimero.mkv

  3. procesar este archivo:

    mientras lee la línea; hacer evaluación mv $línea; hecho <archivos.txt

Respuesta2

Me inspiro en aquí:https://unix.stackexchange.com/a/26604

Parece que necesita recorrer tanto el archivo como los archivos en el directorio al mismo tiempo:

DIR=./thefiledir
while : ; do
    read -r oldfile <&3
    read -r newfile <&4
    if [ -z "$oldfile" -o -z "$newfile" ]; then
        break
    fi
    mv $oldfile $newfile
done 3< <( find $DIR -maxdepth 1 -type f | sort ) 4< filenames.txt

No sé si tiene el nombre del directorio en el filenames.txtarchivo, por lo que es posible que desee poner un echoantes de la mvlínea para probar que esto hará lo que desea.

Además, podría intentar hacer esto de otra manera... No estoy seguro de cómo estás generando el archivo con los nuevos nombres, pero como sugiere otra respuesta, puedes recorrer un archivo de nombres antiguos y nuevos o simplemente leer los nombres y aplicar algo de lógica para crear los nuevos nombres.

información relacionada