#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
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
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
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
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
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,
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"
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.
É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