shellx a écrit 11 commentaires

  • # Eureka ....

    Posté par  . En réponse au message tar : <chemin ver le fichier/file.tar.gz> : non trouvé dans l'archive. Évalué à 1. Dernière modification le 12 juillet 2018 à 18:33.

    Enfin, la lumière

    En faite toute le probléme survenait de l'utilisation de "" guilemets

    J'ai testé le code ci-dessous avec sucées:

    #!/bin/bash
    liste_rep=folder/*
    echo "LISTE REP :" $liste_rep
            for rep in $liste_rep 
    ### $liste_rep Sans guilemets 
            do
                    echo "AFFICHE REP :"$rep
                    for fichier in $rep/*.tar.gz 
    ### $rep et non $liste_rep > liste_rep n'est pas dans la boucle 
    ### $rep affiche folder/001 ... 003
                    do
                            echo "FICHIER :" $fichier
    ### $fichier affiche le chemin complet avec les fichier tar.gz de chaque sub-repertoire
                            tar -zxvf $fichier --directory $rep/
    ### -- directory decompresser dans $rep = folder/001 et / donc folder/001/...003/
                    done
            done
    exit
    class Ruby
    end

    Merci de ton aide.

  • [^] # Re: Reponse

    Posté par  . En réponse au message Décompresser plusieurs tar.gz. files à l’intérieur de plusieurs dossiers. Évalué à 1.

    Aucun souci,

    Mais le batch se términe toujours en échec.
    ls: impossible d'accéder à folder/*.tar.gz : aucun fichier de ce type

    en effet,
    Les tar.gz si trouve dans
    /folder/001
    /folder/002
    /folder/003

  • [^] # 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é à 1. Dernière modification le 12 juillet 2018 à 16:00.

    Non,
    Les tar.gz contienne des fichiers text

    [shellx] $ ls folder/*
    folder/001:
    CARDV022A0.tar.gz --> Contient fichier "cardv22"
    CARDV02976.tar.gz—> contiernt fichier "cardv29"
    CARDV02A0.tar.gz --> contient fichier "cardv2"
    CARDV976.tar.gz --> contient fichier "cardv9"

    folder/002:
    CARDV02976.tar.gz --> contient fichier "cardv29" mais le contenu de cardv29 de ce folder/002 d est different ddu fichier "cardv29" /folder/001
    CARDV976.tar.gz --> Pareil pour le cardv29 - le noms de tar sont identiques, les nom de fichiers extraint aussi, mais les contenu des fichiers extraits sont difrentes pour chauqe folder 001 002 003 004

    folder/003:
    CARDV022A0.tar.gz
    CARDV02976.tar.gz
    CARDV976.tar.gz

    folder/004:
    CARDV02976.tar.gz CARDV976.tar.gz

    j'ai fait echo avec la variable avec et sans guilemets.
    C'est noté. Merci

  • [^] # 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é à 1. Dernière modification le 12 juillet 2018 à 14:58.

    J'ai tout testé, malheureusement sans sucées.

    SOLUTION 1
    #!/bin/bash
    liste_rep=folder/*
    echo $liste_rep
            for rep in "$liste_rep"
            do
                cd "$rep"
                for fichier in *.tar.gz
                do
                        #echo "VAR FICHIER :" $rep
                        tar -zxvf $fichier
                done
            cd -
            done
    #tar -zxvf $fichier/*.tar.gz --directory $fichier/
    exit
    class Ruby
    end

    Resultat # decomprésse juste folder 001 à la racine
    [shellx] $ ./decomp4.sh
    folder/001 folder/002 folder/003 folder/004
    ./decomp4.sh: line 6: cd: folder/*: Aucun fichier ou dossier de ce type
    ./
    ./list_fic
    ./BATI
    ./DLOT
    ./FANR
    ./FPDL
    ./NBAT
    ./PARA
    ./PROP
    ./decomp4.sh: line 12: cd: « OLDPWD » non défini

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

    Resultat -> Les fichiers ont tous été decompressées à la racine et ecrassées
    Le nom des fichiers tar.gz sont diferents mais les noms de fichiers contenu dans les tar.gz est identique.

    [shellx] $ ./decomp_sol2.sh
    ./decomp_sol2.sh: line 5: cd: folder/001*: Aucun fichier ou dossier de ce type
    ./
    ./list_fic
    ./6034_BATI_2014
    ./6035_NBAT_2014
    ./decomp_sol2.sh: line 7: cd: « OLDPWD » non défini
    ./decomp_sol2.sh: line 5: cd: folder/001*: Aucun fichier ou dossier de ce type
    ./
    ./6035_NBAT_2014
    ./list_fic
    ./6034_BATI_2014
    ./decomp_sol2.sh: line 7: cd: « OLDPWD » non défini
    ./decomp_sol2.sh: line 5: cd: folder/001*: Aucun fichier ou dossier de ce type
    ./
    ./list_fic
    ./BATI
    ./DLOT
    ./FANR
    ./FPDL
    ./NBAT
    ./PARA
    ./PROP
    ./decomp_sol2.sh: line 7: cd: « OLDPWD » non défini
    ./decomp_sol2.sh: line 5: cd: folder/001*: Aucun fichier ou dossier de ce type
    ./
    ./NBAT
    ./PARA
    ./FPDL
    ./DLOT
    ./FANR
    ./PROP
    ./BATI
    ./list_fic
    ./decomp_sol2.sh: line 7: cd: « OLDPWD » non défini
    ./decomp_sol2.sh: line 5: cd: folder/002*: Aucun fichier ou dossier de ce type
    ./
    ./6035_NBAT_2014
    ./list_fic
    ./6034_BATI_2014
    ./decomp_sol2.sh: line 7: cd: « OLDPWD » non défini
    ./decomp_sol2.sh: line 5: cd: folder/002*: Aucun fichier ou dossier de ce type
    ./
    ./NBAT
    ./PARA
    ./FPDL
    ./DLOT
    ./FANR
    ./PROP
    ./BATI
    ./list_fic
    ./decomp_sol2.sh: line 7: cd: « OLDPWD » non défini
    ./decomp_sol2.sh: line 5: cd: folder/003*: Aucun fichier ou dossier de ce type
    ./
    ./list_fic
    ./6034_BATI_2014
    ./6035_NBAT_2014
    ./decomp_sol2.sh: line 7: cd: « OLDPWD » non défini
    ./decomp_sol2.sh: line 5: cd: folder/003*: Aucun fichier ou dossier de ce type
    ./
    ./6035_NBAT_2014
    ./list_fic
    ./6034_BATI_2014
    ./decomp_sol2.sh: line 7: cd: « OLDPWD » non défini
    ./decomp_sol2.sh: line 5: cd: folder/003*: Aucun fichier ou dossier de ce type
    ./
    ./NBAT
    ./PARA
    ./FPDL
    ./DLOT
    ./FANR
    ./PROP
    ./BATI
    ./list_fic
    ./decomp_sol2.sh: line 7: cd: « OLDPWD » non défini
    ./decomp_sol2.sh: line 5: cd: folder/004*: Aucun fichier ou dossier de ce type
    ./
    ./6035_NBAT_2014
    ./list_fic
    ./6034_BATI_2014
    ./decomp_sol2.sh: line 7: cd: « OLDPWD » non défini
    ./decomp_sol2.sh: line 5: cd: folder/004*: Aucun fichier ou dossier de ce type
    ./
    ./NBAT
    ./PARA
    ./FPDL
    ./DLOT
    ./FANR
    ./PROP
    ./BATI
    ./list_fic
    ./decomp_sol2.sh: line 7: cd: « OLDPWD » non défini

    SOLUTION 3

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

    [shellx] $ ./decomp_sol3.sh
    folder/001 folder/002 folder/003 folder/004
    ./decomp_sol3.sh: line 6: cd: folder/*: Aucun fichier ou dossier de ce type
    ./
    ./list_fic
    ./BATI
    ./DLOT
    ./FANR
    ./FPDL
    ./NBAT
    ./PARA
    ./PROP

    SOLUTION 3 bis ## J'ai enlevé le guimets pour "$rep"
    #!/bin/bash
    liste_rep=folder/*
    echo $liste_rep
        for rep in "$liste_rep"
        do
            cd $rep ## J'ai enlevé le guimets 
            echo *.tar.gz | xargs -n 1 tar -zxvf
            cd -
        done
    exit
    class Ruby
    end

    Les fichiers sont bien decompréses uniquement dans le dossier 001 (bouvle pas sur 002 003 004 )

    folder/001 folder/002 folder/003 folder/004
    ./
    ./list_fic
    ./6034_BATI_2014
    ./6035_NBAT_2014
    ./
    ./6035_NBAT_2014
    ./list_fic
    ./6034_BATI_2014
    ./
    ./list_fic
    ./BATI
    ./DLOT
    ./FANR
    ./FPDL
    ./NBAT
    ./PARA
    ./PROP
    ./
    ./NBAT
    ./PARA
    ./FPDL
    ./DLOT
    ./FANR
    ./PROP
    ./BATI
    ./list_fic

    J'ai effectué pas mal de tests, et je suis arrivé au même résultat.

  • [^] # 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é à 1. Dernière modification le 12 juillet 2018 à 13:07.

    J'ai effectué les modifications sugérres, mais j'ai réussi uniquement a decompresser tous les tar.gz au même endroit pour l'instant.

    #!/bin/bash
    liste_rep=folder/*
    #- La variable liste_rep vaut : 'folder/*' et ne contient donc qu’un élément. 
    #- Il faut enlever les guillemets pour laisser bash étendre.
    
    #- La variable « folder » n’est pas utilisé.
    # folder="$(ls folder)"
    #- Le liste_rep est en dehors des guillemets, donc bash évalue folder/* 
    #- et l’étend avant de passer les paramètres à echo…
    echo "LISTE REP :" $liste_rep
            for rep in "$liste_rep"
            do
    #- rep vaut la seule valeur de liste_rep.
                    echo "AFFICHE REP :"$rep
                    #for fichier in "$(ls /folder/*)" # test
    #- Bash étend les répertoires et les fichiers. Donc fichier vaudra :
    #-    * 001/1.tar.gz
    #-    * 001/2.tar.gz
    #-    * 002/1.tar.gz
    #-    * …
                    for fichier in $liste_rep/*.tar.gz
                    do
    #- Tu peux utilisé cd avec dirname… cd $(dirname …)
                            cd $(liste_rep)
                            echo "FICHIER :" $fichier
                            tar -zxvf $fichier  #-  --directory $liste_rep/
    #- Ajouter un cd pour retourner dans le répertoire précédent.
                            cd /
                    done
            done
    exit
    
    end
    class Ruby
    end

    Et merci pour les commentaires et les explications.

  • [^] # Re: Reponse

    Posté par  . En réponse au message Décompresser plusieurs tar.gz. files à l’intérieur de plusieurs dossiers. Évalué à 1.

    J'ai bien effectué les corrections, et ça ne marche pas.
    J'ai des erreurs :
    -bash: {mathjax} : commande introuvable
    tar(child) folder/fichier : la focntion open a échoué: aucun fichier de ce type

  • [^] # 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é à 1.

    J'ai bien essayé et testé plusieurs solutions, l'exécution se termine soit en échec soit en erroné.
    Voic le code retouché.

    #!/bin/bash
    liste_rep="folder/*"
    folder="$(ls folder)"
    echo "LISTE REP :" $liste_rep
            for rep in "$liste_rep"
            do
                    echo "AFFICHE REP :"$rep
                    #for fichier in "$(ls /folder/*)" # test
                    for fichier in $liste_rep/*.tar.gz
                    do
                            #cd $liste_rep
                            echo "FICHIER :" $fichier
                            tar -zxvf $fichier   --directory $liste_rep/
                    done
            done
    exit
    
    end

    J'ai bien effectué des changements de répertoire rien y fait.
    J'ai rajouté une variable

    ```ruby
    folder="$(ls folder)" ##afin de recupérer uniquement les sub dossier 001 002 003 004

    end
    ```

    Les contenu des variables s'affiche correctement
    ruby
    [presta2] $ echo $liste_rep
    folder/001 folder/002 folder/003 folder/004
    -(jeu. juil. 12 10:13:41)--(mrvpgsa001:~)-
    [presta2] $ echo $folder
    001 002 003 004
    end

    Resultat d’exécution
    J'ai insérer 3 outputs à chaque étape de la boucle,

    LISTE REP : folder/001 folder/002 folder/003 folder/004  --->> Liste de srepertoires est correcte
    AFFICHE REP :folder/*  --->>  !!! 
    FICHIER : folder/001/CARDV022A0.tar.gz  --> La variable fichier est bien attribué
    
    end

    tar: folder/002 : non trouvé dans l'archive ---> Comment non tropuvé si --> tar -zxvf $fichier
    tar: folder/003 : non trouvé dans l'archive
    tar: folder/004 : non trouvé dans l'archive
    tar: Arrêt avec code d'échec à cause des erreurs précédentes
    FICHIER : folder/001/CARDV02976.tar.gz
    tar: folder/002 : non trouvé dans l'archive
    tar: folder/003 : non trouvé dans l'archive
    tar: folder/004 : non trouvé dans l'archive
    tar: Arrêt avec code d'échec à cause des erreurs précédentes
    FICHIER : folder/001/CARDV02A0.tar.gz
    tar: folder/002 : non trouvé dans l'archive
    tar: folder/003 : non trouvé dans l'archive
    tar: folder/004 : non trouvé dans l'archive
    tar: Arrêt avec code d'échec à cause des erreurs précédentes
    FICHIER : folder/001/CARDV976.tar.gz

    Si on enlever le commentaire sur #cd $liste_rep
    Les message d'erreur est la suivante

    [presta2] $ ./decomp2.sh*
    LISTE REP : folder/001 folder/002 folder/003 folder/004
    AFFICHE REP :folder/*
    FICHIER : folder/001/CARDV022A0.tar.gz
    tar (child): folder/001/CARDV022A0.tar.gz : la fonction open a échoué: Aucun fichier ou dossier de ce type
    tar (child): Error is not recoverable: exiting now
    tar: Child returned status 2
    tar: Error is not recoverable: exiting now
    FICHIER : folder/001/CARDV02976.tar.gz
    tar (child): folder/001/CARDV02976.tar.gz : la fonction open a échoué: Aucun fichier ou dossier de ce type
    tar (child): Error is not recoverable: exiting now
    tar: Child returned status 2
    tar: Error is not recoverable: exiting now

    Des idées?
    Merci d'avance

  • [^] # Re: Cet Interface ne affiche pas les etoiles "*"

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

    echo "C'est compris" pour le ruby 
    Echo "sur le "cd" ... en cours de test :)
    end
  • # Cet Interface ne affiche pas les etoiles "*"

    Posté par  . En réponse au message tar : <chemin ver le fichier/file.tar.gz> : non trouvé dans l'archive. Évalué à 1. Dernière modification le 11 juillet 2018 à 15:49.

    ===========Attention

    Cet interface n'affiche pas les étoiles "" dans
    liste_rep="/folder/
    "
    et
    "*.tar.gz"

  • # 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é à 1. Dernière modification le 11 juillet 2018 à 15:42.

    Merci Anthony,

    Cela a réglé un problème et soulevé un autre.

    Voici tout l'historique:

    Arborescence

    [shellx] $ ls -l folder
    total 16
    drwxr-xr-x 2 shellx mrv 4096 11 juil. 14:36 001
    drwxr-xr-x 2 shellx mrv 4096 11 juil. 14:37 002
    drwxr-xr-x 2 shellx mrv 4096 11 juil. 14:37 003
    drwxr-xr-x 2 shellx mrv 4096 11 juil. 14:34 004

    Contenu des dossiers

    [shellx] $ ls folder/*
    folder/001:
    CARDV022A0.tar.gz CARDV02976.tar.gz CARDV02A0.tar.gz CARDV976.tar.gz

    folder/002:
    CARDV02976.tar.gz CARDV976.tar.gz

    folder/003:
    CARDV022A0.tar.gz CARDV02976.tar.gz CARDV976.tar.gz

    folder/004:
    CARDV02976.tar.gz CARDV976.tar.gz

    Script suivant ta suggestion

    !/bin/bash

    liste_rep="/folder/"
    echo "LISTE REP :" $liste_rep
    for rep in "$liste_rep"
    do
    for fichier in $liste_rep/
    .tar.gz
    do
    liste_rep="/folder/*"
    echo "FICHIER :" $fichier
    tar -zxvf "$fichier"
    done
    done
    exit

    Problème

    Les fichiers sont tous décompressées dans le dossier de exécution du shell script et non pas à l'intérieur des chaque dossier. Or les tar.gz contiennent de fichier avec des noms identiques, et ils sont tous écrasés.

    j'ai essayé avec les option ci-dessous
    En rajoutant les paramètres suivants dans la ligne respective :
    tar -zxvf "$fichier" -C $liste_rep

    Le erreur suivant est affiché à l’écran pendant l'execution du script:
    LISTE REP : /folder/001 /folder/002 /folder/003 /folder/004
    FICHIER : /folder/001/CARDV022A0.tar.gz
    tar: /folder/002 : non trouvé dans l'archive
    tar: /folder/003 : non trouvé dans l'archive
    tar: /folder/004 : non trouvé dans l'archive
    tar: Arrêt avec code d'échec à cause des erreurs précédentes
    FICHIER : /folder/001/CARDV02976.tar.gz
    tar: /folder/002 : non trouvé dans l'archive
    tar: /folder/003 : non trouvé dans l'archive
    tar: /folder/004 : non trouvé dans l'archive
    tar: Arrêt avec code d'échec à cause des erreurs précédentes
    FICHIER : /folder/001/CARDV02A0.tar.gz
    tar: /folder/002 : non trouvé dans l'archive
    tar: /folder/003 : non trouvé dans l'archive
    tar: /folder/004 : non trouvé dans l'archive
    .
    .
    .
    FICHIER : /folder/004/CARDV02A0.tar.gz

    En faite la variable "$liste_rep" n'est pas très bien en compte à l'intérieur de la deuxième boucle.

    Des idées?
    Merci d'avance

  • # Reponse

    Posté par  . En réponse au message Décompresser plusieurs tar.gz. files à l’intérieur de plusieurs dossiers. Évalué à 0. Dernière modification le 11 juillet 2018 à 11:03.

    J'ai avait oublié un détails dans mon script les "*":

    !/bin/bash
    liste_fichier="/folder/" ## ici
    for fichier in $liste_fichier do
    tar -xzvf $fichier/
    .tar.gz --directory $fichier/ ##et ici dans *.tar.gz
    done
    exit

    Maintenant, j'ai bien testé ton code,

    Mais pendant l’exécution du script j'ai l'erreur suivant :
    ls : impossible d'accéder à /folder//.tar.gz Aucun fichier de ce type

    Et le problème survient du fait que:
    la variable
    prompt> rep="/folder/*"

    les résulta de la variable $rep via un echo done
    /folder/001 /folder/002 /folder/003 ## jusqu'à ici c'est correct

    Mais quand j'attribue "$(ls "$rep"/.tar.gz") " à liste_fichier
    prompt> liste_fichier="$(ls "$rep"/
    .tar.gz") "

    je obtien le message de erreur pendant l'execution du script
    ls : impossible d'accéder à folder/001//.tar.gz Aucun fichier de ce type

    En faite il traite pas la variable "rep" de la même façon quand je l'utilise dans une autre variable.
    Ce qu'il a fait il a juste repris rep="/folder/*" et non le résultat de la variable (/folder/001 /folder/002 /folder/003

    Donc la question, comment utiliser le résultat d'une variable dans une autre?