Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/09/2011, à 03:41

batis610

Script pour unrar des fichiers rar contenus dans plusieurs dossiers

Bonjour à tous,

La situation est la suivante:

DossierPere
-DossierFils1
--DF1.rar
--DF1.r00
--DF1.r01
--DF1.r02
--DF1.r03
--DF1.r04
--...
-DossierFils2
--DF2.rar
--DF2.r00
--DF2.r01
--DF2.r02
--DF2.r03
--DF2.r04
--...
-DossierFils3
--DF3.rar
--DF3.r00
--DF3.r01
--DF3.r02
--DF3.r03
--DF3.r04
--...
-DossierFils4
...

Ce que j'aimerai faire c'est parcourir tous les dossiers et décompresser les fichiers rar (ce qui donne un fichier DFX.ext), puis renommer ce fichier résultant en utilisant le nom du dossier le contenant (=> DossierFilsX.ext) avant de déplacer tous les fichiers résultant vers un dossier de choix (ex: /home/unrar)...

Après de longues recherches, j'ai pu avoir un script qui permet tous simplement de décompresser tous les fichiers rar contenu dans un seul dossier... ce qui necessite le deplacement préalable de tous les rar dans un dossier unique avant d'executer la commande, ce qui n'est pas toujours facile:

for f in *.rar; do unrar x -o- "$f"; done

Étant un novice, j'éspère qu'un volontaire puisse modifier ce script pour exécuter tous ce dont j'ai besoin comme j'ai expliqué dessus...

Merci d'avance smile

Hors ligne

#2 Le 19/09/2011, à 21:11

pingouinux

Re : Script pour unrar des fichiers rar contenus dans plusieurs dossiers

Bonjour,
Vous pouver essayer ceci (je n'ai pas pu tester, et n'utilise pas unrar).
Bonne chance

cd /.../DossierPere
# Boucle sur chacun des dossiers fils
for rep in DossierFils*
do
 # On se place dans DossierFilsX
   cd /.../DossierPere/$rep
 # On suppose 1 seul fichier .rar
   fic=*.rar
   unrar x -o- $fic
 # fic=DF1.rar => nom=DF1
   nom=`basename $fic .rar`
 # DF1.ext est déplacé dans /home/unrar sous le nom DossierFilsX.ext
   mv $nom.ext /home/unrar/$rep.ext
done

Dernière modification par pingouinux (Le 20/09/2011, à 08:34)

Hors ligne

#3 Le 20/09/2011, à 03:56

batis

Re : Script pour unrar des fichiers rar contenus dans plusieurs dossiers

Merci pingouinux pour ta réponse tant attendue smile

Je n'ai pas encore exécuté le script mais je tient à apporter quelques détails supplémentaires pour améliorer le script:
- Les dossiers fils peuvent ne pas avoir un nom générique avec le préfixe identique "DossierFils" genre : chats, chiens, mouche, rat,... donc il faudra parcourir tour les sous-dossiers en ignorant la structure de leur noms
- après extarction j'obtiens un fichier XXXX.ext avec ext peut être "iso, avi, wmv,...", et ce que je devrais faire est renommer ce fichier avec le nom du dossier qui le contient tout en gardant son extension d'origine... avant de le déplacer vers un dossier de choix...

Merci encore smile

Hors ligne

#4 Le 20/09/2011, à 05:51

pingouinux

Re : Script pour unrar des fichiers rar contenus dans plusieurs dossiers

Bonjour,
Ceci a plus de chance de convenir. Il faut néanmoins donner la liste des extensions possibles au début du script.
A+

pere="/.../DossierPere"
# Liste des extensions possibles
liste_ext="iso avi wmv"
# Création du répertoire de stockage s'il n'existe pas
rep_unrar=/home/unrar
[ -d "$rep_unrar" ] || mkdir "$rep_unrar"

# Boucle sur tout le contenu de $pere
for rep in $pere/*
do
 # Si rep n'est pas un répertoire, on saute la séquence
 # On suppose qu'il n'y a pas d'autres répertoires que les fils
   [ -d "$rep" ] || continue
   fils=`basename "$rep"`  # Nom du dossier fils, sans le chemin
 # On se place dans le dossier fils
   cd "$rep"
 # On suppose 1 seul fichier .rar dans chaque dossier fils
   fic="*.rar"
   unrar x -o- $fic
 # fic=DF1.rar => nom=DF1
   nom=`basename $fic .rar`
 # On passe en revue les extensions possibles
   for ext in $liste_ext
   do
    # Si aucun fichier n'a l'extension, on saute la séquence
      [ -f "$nom.$ext" ] || continue
    # DF1.ext est déplacé sous le nom dossier_fils.ext
      mv $nom.$ext $rep_unrar/$fils.$ext
   done
done

Dernière modification par pingouinux (Le 20/09/2011, à 08:28)

Hors ligne

#5 Le 25/09/2011, à 19:50

batis610

Re : Script pour unrar des fichiers rar contenus dans plusieurs dossiers

Bonsoir mon héro tongue

D'abord je m'excuse pour cette réponse tardive... C'est dû au fait que ma boite d'alimentation a rendue l'âme... un ami m'as dépanner en attendant de la changer...

Donc en changeant les chemins pour le père et rep_unrar, le script ne marche pas... il suffit d'ôter les guillemets du chemin du dossier père pour que miraculeusement ça fonctionne ;-)

Je ne saurais vous remercier assez pour le service que vous m'avez rendu... ça me facilitera tellement la vie smile

Mais dans le but de perfectionner ce script, il devrait y avoir un autre moyen pour gérer l'extension du fichier décompressé... peut être en l'extrayant directement du nom de celui-ci avant renommage (4 caractères à partir de la droite)

Également des fois l’extraction est fructueuse donnant ce message "All OK"... et des fois elle ne l'est pas "No files to extract"... Ce serai bien de savoir surtout quel dossiers sont concerné par l'erreur en stockant leurs noms dans un fichier texte plus simple à lire que sur le terminal où il faut vérifier des centaines de lignes...

Quoi qu'il en soit... merci mille fois pour votre aide si précieuse

Bien à vous

Dernière modification par batis610 (Le 25/09/2011, à 20:23)

Hors ligne

#6 Le 26/09/2011, à 07:49

pingouinux

Re : Script pour unrar des fichiers rar contenus dans plusieurs dossiers

Bonjour,

batis610 #5 a écrit :

Donc en changeant les chemins pour le père et rep_unrar, le script ne marche pas... il suffit d'ôter les guillemets du chemin du dossier père pour que miraculeusement ça fonctionne ;-)

Je suis surpris, car ça fonctionne parfaitement chez moi. Pouvez-vous m'envoyer le script qui ne fonctionne pas ?

En revanche, pour pallier le cas des noms de fichier contenant des espaces, il y aurait 2 lignes à modifier :
1) Remplacer

for rep in $pere/*

par

for rep in "$pere"/*

2) Remplacer

mv $nom.$ext $rep_unrar/$fils.$ext

par

mv "$nom.$ext" "$rep_unrar/$fils.$ext"
batis610 #5 a écrit :

il devrait y avoir un autre moyen pour gérer l'extension du fichier décompressé... peut être en l'extrayant directement du nom de celui-ci avant renommage (4 caractères à partir de la droite)

Oui, mais il faut savoir quoi chercher, ou avoir une façon de récupérer le nom de ce fichier dans l'archive. Je ne sais pas faire.

batis610 #5 a écrit :

Également des fois l’extraction est fructueuse donnant ce message "All OK"... et des fois elle ne l'est pas "No files to extract"... Ce serai bien de savoir surtout quel dossiers sont concerné par l'erreur en stockant leurs noms dans un fichier texte plus simple à lire que sur le terminal où il faut vérifier des centaines de lignes...

Une méthode est de rediriger la sortie standard du script (et/ou son fichier d'erreur) sur un fichier, pour le visualiser ensuite (ou en extraire les informations avec grep ou équivalent).
Une autre est de tester le code de retour de unrar (variable $?), que je suppose différent suivant que l'extraction a réussi ou pas. Vous pouvez alors écrire les informations utiles dans un fichier à part.

Bonne semaine

Hors ligne