Il y a quelques temps, j’avais du faire un petit script pour de la décompression d’archives multiples sous Linux. Le script est utilisé assez fréquemment. Mais aujourd’hui, l’utilisation commence à devenir un peu plus intensive. Il s’agit de traiter, d’une commande, une plus grosse quantité d’archives. Concrètement, le script peut mettre quelques heures à s’éxecuter.
Par conséquent, il faudrait avoir un rapport à la fin de l’exécution du script. En effet, on ne peut pas lancer un script pendant une nuit entière sans avoir de rapport final. L’idée est donc de reprendre le script précédemment développé et de faire ce qui suit:
- Rendre
rarun peu moins verbeux. C’est l’option-idqqui fait ça. Elle bloque tout les messages sauf les warnings / erreurs. - Vérifier que chaque exécution de
rars’est bien passée. Il s’agit d’utiliserif [ $? = 0 ];qui se traduit par Est-ce que la dernière commande exécutée à retourné 0?. - Faire un bilan général de l’exécution. Rien de bien compliqué, on place des compteurs un peu partout. Il faut aussi penser à garder de coté le nom des archives où ça ne s’est pas bien passé.
- Ne supprimer que les archives dont on est certains qu’elles ont bien été décompressées.
Au final,voilà ce que donne le script:
#!/bin/sh
#Script de désarchivage de rar en masse
#Réalisé par Julien Quéré - http://webd.fr
#Variables de couleur
VERT="\\033[1;32m"
NORMAL="\\033[0;39m"
ROUGE="\\033[1;31m"
BLEU="\\033[1;34m"
#Compteurs d'erreur, de traitement et de désarchivages valides
errorCpt=0;
passCpt=0;
okCpt=0;
clear
#On boucle sur la liste des résultats du find
for j in ` find . -name *.rar`
do
echo "$BLEU[Start] --- Désarchivage de $j ---$NORMAL"
#On Derare
rar e $j -o+ -idq
#On réagit en fonction de la présence ou non d'une erreur
if [ $? = 0 ]; then
echo "$VERT[OK] --- $j désarchivé avec succès ---"
okCpt=`expr $okCpt + 1`
#On Supprime tout les fichier .r* de l'archive qui s'est bien désarchivée
rm -rf ${j%.*}.r*
else
echo "\n$ROUGE[FAIL] --- $j non-désarchivé ---"
errorCpt=`expr $errorCpt + 1`
errorMsg="$errorMsg $j \n":
fi
passCpt=`expr $passCpt + 1`
done
#Affichage du rapport
echo "\n\n$BLEU--------------- RAPPORT ---------------";
echo "$BLEU Archives traitées : $passCpt";
echo "$VERT Archives traitées avec succès: $okCpt";
if [ $errorCpt -gt 0 ]; then
echo "$ROUGE Archives échouées : $errorCpt";
echo "\n$ROUGE Liste des désarchivages échoués: \n"
echo $errorMsg
fi
#On repasse la console en normal
echo "$NORMAL" |
Bref, un petit script simple mais qui fait gagner pas mal de temps. Je conseille même d’en faire un alias dans votre bashrc. Voici un exemple de résultat:


Ping : Webd » Décompresser des archives dans des dossiers multiples sous Mac