IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Compresser chaque sous-répertoires en archive.


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2014
    Messages : 17
    Points : 19
    Points
    19
    Par défaut Compresser chaque sous-répertoires en archive.
    Bonjour à tous !

    Alors voilà, j'aimerais faire un script bash qui permettrait de réaliser les opérations suivantes.

    Analyser un répertoire de manière récursive en choisissant le niveau de récursion.
    Transformer chaque sous-dossier en archive(zip par exemple) indépendante, reprenant le nom du sous-dossier et l'enregistrant dans un répertoire donné.

    Dans l'arborescence de mon répertoire test j'ai : Base_Test---->Test1---->dossier1---dossier2---dossier3...

    Du coup, avec un niveau de récursion de 3, le script devrais me fournir les archives "dossier1.zip, dossier2.zip, dossier3.zip..." le tout de le répertoire output donné.

    Donc, j'ai deux question pour lesquelles j'aurais besoin d'un peu d'aide.

    1- La méthodologie est-elle la bonne (pensez-vous qu'un script structurer de la sorte fonctionnerais convenablement) ?
    2- Comment obtenir seulement un certain niveau de récursion ? J'avais tenté la commande "dir" mais soit elle n'est pas récursive du tout, soit elle l'est complètement :/ .

    Voila, merci d'avoir lu mon message jusqu'au bout et du temps que vous prendrez pour y répondre.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Sivenruot Voir le message
    1- La méthodologie est-elle la bonne (pensez-vous qu'un script structurer de la sorte fonctionnerais convenablement) ?
    Bonjour

    Pas de soucis hormis le fait que tu veuilles faire du zip (sous Linux ce serait plutôt du tar ou du tgz...)

    Citation Envoyé par Sivenruot Voir le message
    2- Comment obtenir seulement un certain niveau de récursion ? J'avais tenté la commande "dir" mais soit elle n'est pas récursive du tout, soit elle l'est complètement :/ .
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    find base -mindepth 3 -maxdepth 3 -type d -exec tar cfz {}.tgz {} \;
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2014
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    J'ai fini par pondre ce script avec l'aide de la communauté :

    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
    #!/bin/bash
     
    function usage
    {
    	echo "Usage $(basename $0) DirBASE RERCURSION OUTPUTfullway PASSWORD" >&2
    }
     
    #echo $#
    if [ $# -ne 4 ]; then
    	usage $0;
    	exit 0;
    fi
     
    ROOTDIR=$1
    if [ ! -d $ROOTDIR ] ; then
    	echo "$ROOTDIR is not a directory" >&2
    	exit 1
    fi
     
    shift
    LEVEL=$1
    re='^[0-9]+$'
    if ! [[ $LEVEL =~ $re ]] ; then
    	echo "$LEVEL is not numeric" >&2
    	usage $0
    	exit 1
    fi
    if [ ${LEVEL} -eq 0 ] ; then
    	LEVEL=1
    fi
     
    testpath=""
    for cnt in $( seq 1 ${LEVEL} ) ; do
    	testpath="${testpath}.*\/"
     
    OUTPUT=$2
    PASSWORD=$3
     
    done
     
    find ${ROOTDIR} -maxdepth ${LEVEL} -mindepth ${LEVEL} -type d -exec 7z a -t7z -m0=lzma -mfb=64 -md=32m -ms=on -mx=9 -mhe=on -p${PASSWORD} ${OUTPUT}{}.7z {} \;
    cd ${OUTPUT} \;
    find -name *.7z -exec mv {} ${OUTPUT} \;
    rm -dir -f */ \;
    Tout fonctionne .

    PS: Je fais du zip, car les fichiers sont destinées a l'upload, et le .zip et .rar sont bien plus rependu.

    En tous cas merci pour votre aide

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Sivenruot Voir le message
    J'ai fini par pondre ce script avec l'aide de la communauté...
    Il est pas mal. Mais essaye de mettre tes variables en minuscules, tu verras que ton script sera beaucoup plus agréable à lire. Et c'est pareil avec les accolades. Moi aussi une fois je m'étais mis en tête de les mettre systématiquement. Ben c'est aussi chiant à écrire qu'à relire.

    Citation Envoyé par Sivenruot Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
     
    if [ $# -ne 4 ]; then
    	usage $0;
    	exit 0;
    fi
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [ $# -lt 4 ]; then
    	usage $0;
    	exit 0;
    fi
    En effet, pourquoi forcer à rentrer pile poil 4 arguments ? Si le gars en rentre 5 ou 15 c'est pas grave, simplement tu ne traiteras que les 4 premiers...

    Citation Envoyé par Sivenruot Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [ ${LEVEL} -eq 0 ] ; then
    	LEVEL=1
    fi
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    [ $LEVEL -eq 0 ] && LEVEL=1
    A toi de voir si cette façon d'écrire te convient. Moi je trouve ça sympa mais l'inconvénient c'est que si tu dois ensuite rajouter une autre instruction, faut alors revenir au if...fi
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Extraire une archive Tar à partir d'un sous répertoire
    Par regsregs dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 24/08/2013, 11h31
  2. Créer une archive avec une partie des sous-répertoires
    Par sclinard dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 21/07/2010, 11h07
  3. Réponses: 1
    Dernier message: 06/07/2009, 13h08
  4. Réponses: 5
    Dernier message: 27/05/2007, 23h20
  5. script qui explore les sous-répertoire ?
    Par farenheit dans le forum Flash
    Réponses: 9
    Dernier message: 20/07/2005, 12h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo