Rinominare i file da un elenco di nomi di file


1

Sono ancora molto nuovo con gli script di shell, quindi sono sicuro che questo comando sia sbagliato. Sto cercando di rinominare una cartella di file con i nomi in un file txt. Il presupposto è che i file filenames.txt e i file nella cartella siano già organizzati in modo da abbinare la prima riga al primo file nel sistema. Quello che ho ottenuto è stato:

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

ma non ha funzionato. Ragazzi, potete aiutarmi a correggerlo?

Grazie

Risposte:


2

Se non si dispone di una regola algoritmica per rinominare i file (ovvero è effettivamente necessario un file come input), suggerirei di farlo

  1. creare un file txt dall'elenco dei file che si desidera rinominare, ad esempio:

    trova . -name "* .mkv"> files.txt

  2. modifica questo file e aggiungi il nuovo nome dopo quello vecchio in ogni riga, ad es

    ./myfirst.mkv ./mynewfirst.mkv

  3. elaborare questo file:

    mentre leggi la riga; fare eval mv $ line; done <files.txt


0

Mi sto ispirando da qui: https://unix.stackexchange.com/a/26604

Sembra che sia necessario scorrere contemporaneamente sia il file che i file nella directory:

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

Non so se hai il nome della directory nel filenames.txtfile, quindi potresti voler mettere un punto echoprima della mvriga per testare che questo farà quello che vuoi.

Inoltre, potrei provare a farlo in un altro modo ... Non sono sicuro di come stai generando il file con i nuovi nomi, ma come suggerisce un'altra risposta, potresti scorrere su un file di nomi vecchi e nuovi o semplicemente leggere i nomi e applicare una logica per creare i nuovi nomi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.