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 :

Information, debbugage et analyse d'un scripte de copie particuliere


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 39
    Par défaut Information, debbugage et analyse d'un scripte de copie particuliere
    Bonjour,

    Ce que je cherche a faire :
    Je cherche a crée un programme qui va compresser un certain nombre de fichier selon une liste.

    je tien a garder l'arborescence des fichier depuis un certain dossier (dod)

    en concret, j'ai une liste de fichier :
    listeres.lst
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /root/facs_ffa/dod/maps/dod_25doors.res
    /root/facs_ffa/dod/maps/dod_2pillboxes.res
    /root/facs_ffa/dod/maps/dod_4saisons.res
    Ces fichier sont des listing :
    dod_25doors.res
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // dod_25doors.res - created with RESGen v2.0.2.
    // RESGen is made by Jeroen "ShadowLord" Bogers,
    // with serveral improvements and additions by Zero3Cool.
    // For more info go to http://resgen.hltools.com
     
    // .res entries (7):
    models/mapmodels/bord.mdl
    models/mapmodels/by_furniture_group-wreck.mdl
    models/mapmodels/couch1bl.mdl
    models/mapmodels/flo_komode02.mdl
    models/mapmodels/mawibse_lamp_01.mdl
    models/mapmodels/piano2.mdl
    sprites/glow01.spr
    Donc je cher a déplacer

    /root/facs_ffa/dod/models/mapmodels/bord.mdl
    /root/facs_ffa/dod/models/mapmodels/by_furniture_group-wreck.mdl
    ...
    vers
    /root/maps/dod_25doors/models/mapmodels/bord.mdl
    /root/maps/dod_25doors/models/mapmodels/by_furniture_group-wreck.mdl


    Et donc voici mon code :
    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
    #!/bin/sh
    PATH_SERV="/root/facs_ffa/dod" #Emplacement serveur
    PATH_SAVE="/root/maps" #Emplaccement sauvegarde
    ls ${PATH_SERV}/maps/*.res > listeres.lst #Listage de fichier qui resence les fichier a sauvegarder
    cat listeres.lst | while read RES_FILE #Pour chaque fichier ressource
    do
    {
            tail -n $(expr `cat ${RES_FILE} | wc -l` - 6) ${RES_FILE} >> fichiers.lst #On ignore les 6 ère ligne, on copie le reste
            temp_name=$(echo ${RES_FILE} | cut -c 25-) #On pré-filtre le nom du sous-dossier de la sauvegarde
            map_name=$(echo ${temp_name%.*}) #On extrait le nom du sous-dossier de la sauvegarde
            echo "mkdir ${PATH_SAVE}/${map_name}" #On crée le sous-dossier de la sauvegarde
            cat fichiers.lst | while read FILE_NEEDED #Pour chaque fichier a sauvegarder
            do
            {
                    fileing=${PATH_SERV}/${FILE_NEEDED}
                    if test ! -r "$fileing" #On vérifie que le fichier existe
                    then
                    {
                    cd ${PATH_SERV} #On se place a la racine du serveur
                    tar -cf ${PATH_SAVE}/${file}/arch.tar ${FILE_NEEDED} #On compresse le fichier AVEC l'arborescence par rapport au serveur
                    cd ${PATH_SAVE}/${file}/ #On se place dans le dossier de sauvegarde
                    tar -xf arch.tar #On décompresse en recréant l'arborescence
                    rm -f arch.tar #On supprime l'archive temporaire
                    #echo "${FILE_NEEDED} ne peut-etre copier" >> /root/bug.txt
                    }
                    else
                    {
                    echo "${FILE_NEEDED} peut-etre copier" >> /root/ok.txt #On crée un fichier en cas d'erreur
                    }
                    fi
            }
            done
            rm fichiers.lst #On supprime le fichier de listing temporaire 
    }
    done
    rm listeres.lst #On supprime le fichier de listing des ressources
    Ce qui semble ne pas marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if test ! -r "$fileing"
    Cet if me revoit systématiquement sur une erreur, même quand le fichier existe, si je ne met pas les guillemets il trouve uniquement les fichiers contenant des espaces, les fichiers sans espaces ne sont pas trouvé.

    Ce qui n’a pas encore était testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cd ${PATH_SERV} #On se place a la racine du serveur
                    tar -cf ${PATH_SAVE}/${file}/arch.tar ${FILE_NEEDED} #On compresse le fichier AVEC l'arborescence par rapport au serveur
                    cd ${PATH_SAVE}/${file}/ #On se place dans le dossier de sauvegarde
                    tar -xf arch.tar #On décompresse en recréant l'arborescence
                    rm -f arch.tar #On supprime l'archive temporaire


    Merci d'avance pour vos explications, toutes vos remarque seront accueil avec joie du moment qu’elles sont constructives.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 81
    Par défaut
    Peux-tu me dire quel est l'intérêt de compresser et de décompresser!

    Est-ce que c'est juste pour déplacer ton arborescence de dod/ vers dod_25doors/??

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 39
    Par défaut
    Oui c'est uniquement pour ca, j'ai cherché pendant un moment mais je n'ai pas trouver d'autre methodes

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 81
    Par défaut
    pourquoi ne fais-tu pas simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cp -r /root/facs_ffa/dod/* /root/maps/dod_25doors/
    en ayant au prélable créé le dossier dod_25doors/ si ce n'est pas déjà fait.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 39
    Par défaut
    car cp -r ne copie pas les sous repertoires seulement le contenu

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 81
    Par défaut
    si le cp -r te copie toute l'arborescence, sous-répertoires et fichiers. Si cela ne fonctionne pour toi, c'est que tu as du faire une erreur de frappe dans la commande.

    normalement pour toi ça doit être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cp -r /root/facs_ffa/dod/* /root/maps/dod_25doors/

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 81
    Par défaut
    ok je crois que je viens de comprendre je n'avais pas vu que tu travaillais en sh alors que moi je faisais mes tests en bash. Donc là ca devrait être bon (enfin j'espère )

    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
     
    #!/bin/bash
     
    PATH_SERV="root/facs_ffa/dod" #Emplacement serveur
    PATH_SAVE="root/maps" #Emplaccement sauvegarde
     
    cat listeres.lst|while read line; do
            fic=`echo $line|awk -F"/" '{print $(NF)}'`   #récupération du nom du fichier uniquement
            #mkdir $PATH_SAVE/${fic%.*}          #création du répertoire
            cat $line|sed 1,6d>liste2                  #suppression des 6 premières lignes en utilisant un fichier temporaire
            cat liste2|while read line2; do            
                    if test -f $PATH_SERV/$line2
                    then
                            echo "ok"
                    else
                            echo "ko"
                    fi
            done
    done
    Voila donc pour ma part cela me renvoie "ok" s'il existe et "ko" s'il n'existe pas.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 39
    Par défaut
    il me revoit ko pour tout les fichier meme si ils existes :/

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 81
    Par défaut
    Il me semble que ca doit etre ton fichier listeres.lst. Fait un cat de ce fichier et voit ce que tu as. Si tu as juste le nom de fichier, c'est normal que ca fonctionne pas, si tu as tout le chemin que tu veux alors il faut chercher ailleurs.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 39
    Par défaut
    Bon j'ai modifier un poil le scripte mais j'ai toujour le meme probleme :
    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
    #!/bin/bash
    PATH_SERV="/root/facs_ffa/dod" #Emplacement serveur
    PATH_SAVE="/root/maps" #Emplaccement sauvegarde
    ls ${PATH_SERV}/maps/*.res > listeres.lst #Listage de fichier qui resence les fichier a sauvegarder
    cat listeres.lst|while read line; do
            fic=`echo $line|awk -F"/" '{print $(NF)}'`   #récupération du nom du fichier uniquement
            #mkdir $PATH_SAVE/${fic%.*}          #création du répertoire
            cat $line|sed 1,6d>liste2                  #suppression des 6 premières lignes en utilisant un fichier temporaire
            cat liste2|while read line2; do     
    				echo "$PATH_SERV/$line2"
                    if test -f "$PATH_SERV/$line2"
                    then
                            echo "$PATH_SERV/$line2 ok" >> result
                    else
                            echo "$PATH_SERV/$line2 ko" >> result
                    fi
            done
    		rm -f liste2
    done
    et voila le resultat :
    http://f4cs.com/result

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 81
    Par défaut
    tu ne m'as pas ce que tu avais quand tu faisais cat de listeres.lst. Peut-être que c'est correct mais au moins je serais fixé.

    ensuite fais attention la création du répertoire est commenté :
    #mkdir $PATH_SAVE/${fic%.*}

    as tu essayé sans les guillemets pour ton test d'existence?

    et dernière chose où se situent ton script et ton fichier listeres.lst par rapport à /root.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 39
    Par défaut
    le listeres : http://f4cs.com/listeres.lst
    le fichiers : http://f4cs.com/fichiers.lst

    le repertoir commenté, pour le moment je le laisse pasque si non je vais devoir fair des rm -R a tout bout de champ ^^

    sans les guillemet, c'est la meme chose, meme erreur. En plus j'ai des nom de fichier qui peuvent contenir des espaces

    le scripte se situe dans /root

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 81
    Par défaut
    tu peux faire un find /root/facs_ffa/dod -type f pour voir si tu vois bien tout tes fichiers (ce que je pense entre nous mais là je suis un peu à sec d'idées...).

    dans ton fichier fichier.lst tu n'as que :
    root/facs_ffa/dod/models/mapmodels/bord.mdl
    ko

    ou alors tu as :
    root/facs_ffa/dod/models/mapmodels/bord.mdl
    root/facs_ffa/dod/models/mapmodels/bord.mdl ko

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

Discussions similaires

  1. Analyse d'un script php malveillant
    Par sami_c dans le forum Langage
    Réponses: 15
    Dernier message: 07/02/2013, 14h49
  2. Réponses: 8
    Dernier message: 25/07/2012, 17h00
  3. Réponses: 7
    Dernier message: 10/08/2011, 15h31
  4. [SNMP] récupérer des informations de la MIB avec un script snmp
    Par patchiko dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/06/2007, 11h05
  5. [DOS] Script de copie
    Par Empty_body dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 01/03/2007, 09h21

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