Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/04/2015, à 11:38

chessou

[résolu]Aide script renommer fichiers par du contenu

Bonjour à tous,

Je pensais me débrouiller seul car l'idée est simple mais je coince déjà, étant novice en la matière.

Je souhaite renommer de nombreux fichiers (plus de 3000) type .pgn (format d'échecs), nommés 1.pgn, 2.pgn, 3.pgn etc... en fonction de mots situés dans une ligne particulière qu'ils contiennent.
Il s'agit de fichiers simples d'un format standart qui peuvent tout à fait êtres ouverts avec gedit par exemple.

Je souhaite les renommer en fonction de noms de joueurs qu'ils contiennent, voici un en-tête typique dans un fichier:

[Event "Rated game"]
[Site "http://lichess.org/FE9zaELT"]
[Date "2015.03.21"]
[Round "?"]
[White "zagas"]
[Black "nono"]
[Result "0-1"]
[WhiteElo "1531"]
[BlackElo "1500"]

Je souhaite renommer ce fichier en zagas - nono 210315.pgn., donc en fonction des lignes [White ...], [Black...], [Date...].
Donc extraire pour chaque fichier noms des joueurs et date et ensuite les renommer en fonction pour éviter de le faire à la main.

J'ai commencé mon script mais comme vous pouvez le voir ça ne casse pas la baraque je bloque déjà:

#!/bin/bash
# Indique au système que l'argument qui suit est le programme utilisé pour exécuter ce fichier
# En règle générale, les "#" servent à mettre en commentaire le texte qui suit comme ici

cd /home/yoann/programmes
find *.pgn


exit 0

Pourriez vous m'aider à écrire mon script? Est-ce facile ou je m'embarque dans un truc impossible?

Merci d'avance!

Dernière modification par chessou (Le 03/04/2015, à 13:18)

Hors ligne

#2 Le 03/04/2015, à 12:22

pingouinux

Re : [résolu]Aide script renommer fichiers par du contenu

Bonjour,
Tu peux essayer ceci

#!/bin/bash

for fic in *.pgn
do
   date=$(sed -rn 's/^\[Date "(.+)"]/\1/p' "$fic")
   white=$(sed -rn 's/^\[White "(.+)"]/\1/p' "$fic")
   black=$(sed -rn 's/^\[Black "(.+)"]/\1/p' "$fic")
   nom="$white - $black ${date:8:2}${date:5:2}${date:2:2}.pgn"
   echo mv -i "$fic" "$nom"
done

et enlever le echo si c'est bon.

Remarque : C'est aussi bien de ne pas mettre d'espaces dans les noms de fichiers

Hors ligne

#3 Le 03/04/2015, à 12:31

chessou

Re : [résolu]Aide script renommer fichiers par du contenu

Merci ça marche!!!

Je t'avoue que là je suis un peu vert que tu aies fait ça en 2 secondes! J'étais en train de me prendre la tête avec des less et vi etc...
Vraiment c'est top le temps que je vais gagner!

Pourrais tu si ce n'est pas trop t'en demander m'expliquer ce script, parce que du coup je comprends rien et je me dis que je pourrais m'en servir pour d'autres applications?
Merci! big_smile

Hors ligne

#4 Le 03/04/2015, à 13:09

pingouinux

Re : [résolu]Aide script renommer fichiers par du contenu

En gros

  1. On récupère les informations qui nous intéressent avec sed (voir man sed)

  2. On bricole la variable date pour lui donner le bon format (voir man bash, rubrique Parameter Expansion)

  3. On crée le nouveau nom du fichier

  4. On renomme le fichier

Hors ligne

#5 Le 03/04/2015, à 13:16

chessou

Re : [résolu]Aide script renommer fichiers par du contenu

Parfait c'est un peu compliqué pour moi à cause du langage mais je comprends bien la logique, je devrais donc pouvoir l’utiliser par analogie pour d'autres usages.

En tout cas merci d'avoir passé du temps sur mon cas, je ne regrette pas d'être passé sous linux, la communauté est vraiment très active!

wink

Hors ligne