Bonjour.
Je suis débutant en scripting shell, je cherche depuis 2 jours à trouver des solutions pour créer mon script mais là je suis quelque peu bloqué. j'ai du voir la solution sans la trouvé
Je souhaite faire un script me permettant de renommer les noms de fichiers de mes séries, le plus générique possible.
Contrainte : environnement linux SYNOLOGY (donc certaines commandes ne sont pas disponible tel que : "TR")
Le code est peut être fouillis pour un dev qui respect des normes de nomenclatures.
Voici mon code actuel :
J'aimerais de l'aide pour matcher une valeur d'une string contenu dans une variable:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 #!/bin/sh OLD_IFS="$IFS"; IFS=$'\n'; if [ $# -le 2 ]; then cd $1 #cdResult=`cd $1` # if [ $cdResult -qe false ]; then EpisodeNumber=1; printf "le répertoire courant est désormais : "`pwd` read key printf "Saisissez le nom de la série : " read NomDeSerie printf "Le nom de la série est donc : "$NomDeSerie read key #printf "Saisissez l'extension (exemple: avi): " #read ext for Filename in $(ls *.avi *.mp4 *.mkv); do ext=`expr "$Filename" : ".*\(...\)"` #i=`echo $Filename | awk {'print tolower($_)'}` if [ $EpisodeNumber -le 9 ] ; then mv $Filename $NomDeSerie"0"$EpisodeNumber.$ext; else mv $Filename $NomDeSerie$EpisodeNumber.$ext; fi EpisodeNumber=$(($EpisodeNumber + 1)); done; # else # echo "erreur : Le répertoire est invalide" # fi else echo "Il faut saisir le nom du répertoire : "$0" <nom du répertoire ou chemin complet> " fi cd .. IFS="$OLD_IFS";
Voici mon déroulement logique :
Exemple nomenclature de fichier:
Il est certainement plus facile de le faire en C, mais n'ayant aucune connaissance et souhaitant me familiarisé avec les commandes shell en général je préfère rester sur le shell.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 xxxxxxxxxS05E12.xxx xxxxxxxxxxxxxxs05e12.xxx xxxxxxxxx512.xxx xxxxx05x12.xxx Ou je me situe ? si dossier: ok alors : déplacement dans le dossier sinon (output de la commande CD): erreur préciser nom de dossier logique : saison = ? episode = ? chaine = chaine en minuscule 1. si s - nombre -> saison e - nombre -> episode 2. si nombre - x - nombre => saison - x - episode 3. detecterai les nombres -> si entre 100 et 1000 alors 1er charactere = saison les autres = episode En gros ça fera ça : $nomdeserie = scanf() for ($origin in $(ls)) do $tmp = Minuscule($origin) # ca je l'ai $saison = 0 $episode = 0 if [1] then elif [2] then elif [3] then else printf "error : " $origin mv $origin $nomdeserie"S"$saison"E"$episode done
Je souhaiterais donc savoir quel commande (grep ? sed ? awk ? expr ? cut ?) utiliser pour matcher dans une variable la saison et l'épisode.
Zt l'autre chose est que je n'arrive pas, en début de code, à récupérer l'output de la commande 'CD', de façon à pouvoir retourner une erreur si la saisie est erroné !
Merci d'avance pour votre aide.
PS : si c'est possible d'avoir les explication des commandes que vous me proposer que je comprenne et puisse les réutiliser ultérieurement.
Partager