• [^] # Re: Boucle correcte - destination erroné

    Posté par . En réponse au message tar : <chemin ver le fichier/file.tar.gz> : non trouvé dans l'archive. Évalué à 2.

    Je reprends et termine.

    #!/bin/bash
    liste_rep=folder/*
    echo "LISTE REP :" $liste_rep
     for rep in "$liste_rep"
     do
     echo "AFFICHE REP :"$rep
     for fichier in $liste_rep/*.tar.gz
     do
    #- Tu peux utilisé cd avec dirname... cd $(dirname ...)
    #- Non, soit tu fais : cd "$rep" les guillements c’est pour être robuste aux espaces.
    #ERROR cd $(liste_rep)
     cd "$rep"
     echo "FICHIER :" $fichier
     tar -zxvf $fichier
    #- Ajouter un cd pour retourner dans le répertoire précédent.
    #- il faut lancer cd - ça revient au répertoire où tu étais précédemment.
    #ERROR cd /
     cd -
     done
     done
    exit

    Néanmoins on peut faire plus simple : (avec 2 boucles)

    #!/bin/bash
    liste_rep=folder/*
    for rep in "$liste_rep"
    do
     cd "$rep"
     for fichier in *.tar.gz
     do
     tar -zxvf $fichier
     done
     cd -
    done
    exit

    Autre solution avec une seule boucle. On profite que bash sait étendre plusieurs *

    #!/bin/bash
    for fichier in folder/*/*.tar.gz
    do
     rep=$( dirname "$fichier" )
     cd "$rep"
     tar -zxvf $fichier
     cd -
    done
    exit

    L’avantage de la deuxième solutions c’est que c’est plus court. L’inconvénient c’est que tu as beaucoup plus de changement de répertoire.

    Le cd - affiche le répertoire de destination, si ça pollue ton affichage, il faut rediriger la sortie vers /dev/null.

    Sinon, je n’ai pas vérifié, il est probable qu’il y ait des erreurs de syntaxes.

    Une dernière pour la route, on reprend la première solution et on vire la boucle. N’hésite pas a faire man des commandes utilisées.

    #!/bin/bash
    liste_rep=folder/*
    for rep in "$liste_rep"
    do
     cd "$rep"
     echo *.tar.gz | xargs -n 1 tar -zxvf 
     cd -
    done
    exit