1 votes

Renommer des fichiers à partir d'une liste de noms de fichiers

Je suis encore très novice en matière de Shell scripting, donc je suis sûr que cette commande est complètement fausse. J'essaie de renommer un dossier de fichiers aux noms dans un fichier txt. La condition préalable est que le fichier filenames.txt et les fichiers du dossier soient déjà organisés pour faire correspondre la première ligne au premier fichier du système. Ce que j'ai obtenu est :

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

mais ça n'a pas marché. Pouvez-vous m'aider à le corriger ?

Gracias

2voto

tonioc Points 853

Si vous n'avez pas de règle algorithmique pour renommer les fichiers (c'est-à-dire que vous avez réellement besoin d'un fichier en entrée), je suggère de

  1. créer un fichier txt à partir de la liste des fichiers que vous voulez renommer, par exemple :

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

  2. éditez ce fichier et ajoutez le nouveau nom après l'ancien dans chaque ligne, par ex.

    ./myfirst.mkv ./mynewfirst.mkv

  3. traiter ce fichier :

    while read line ; do eval mv $line ; done < files.txt

0voto

Sameer Segal Points 6268

Je m'inspire d'ici : https://unix.stackexchange.com/a/26604

Il semble que vous ayez besoin de boucler à la fois sur le fichier et sur les fichiers du répertoire en même temps :

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

Je ne sais pas si vous avez le nom du répertoire dans le filenames.txt vous pouvez donc mettre un echo avant le mv pour vérifier qu'il fait ce que vous voulez.

Aussi, je pourrais essayer de faire ça d'une autre manière... Je ne sais pas comment vous générez le fichier avec les nouveaux noms, mais comme une autre réponse le suggère, vous pourriez boucler sur un fichier d'anciens et de nouveaux noms ou simplement lire les noms et appliquer une certaine logique pour créer les nouveaux noms.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X