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 :

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";
J'aimerais de l'aide pour matcher une valeur d'une string contenu dans une variable:

Voici mon déroulement logique :

Exemple nomenclature de fichier:
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
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.

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.