Script de renommage en sh avec contrainte d'environnement
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é :arf:
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:
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:
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.