#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!
Hors ligne
#4 Le 03/04/2015, à 13:09
- pingouinux
Re : [résolu]Aide script renommer fichiers par du contenu
En gros
On récupère les informations qui nous intéressent avec sed (voir man sed)
On bricole la variable date pour lui donner le bon format (voir man bash, rubrique Parameter Expansion)
On crée le nouveau nom du fichier
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!
Hors ligne