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

Administration système Discussion :

[shell] script de sauvegarde


Sujet :

Administration système

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut [shell] script de sauvegarde
    Bonjour,
    je rencontre une colle sur un petit script de sauvegarde de fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
    for f in /zone/*/root/var/yp/src/netgroup;
            do cp $f /zone/*/root/var/yp/src/netgroup.save.$(date +%Y%m%d-%H%M)
            done
    le probleme en l'executant :
    pour chaque * (correspondant a un dossier) j obtiens

    cp: cannot create /zone/*/root/var/yp/src/netgroup.save.20111219-1234: No such file or directory

    alors que j'ai faits le script de test suivant qui fonctionne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    for f in /zone/*/root/var/yp/src/netgroup;
            do if test -s fichier;
            then echo netgroup "$f" ATTENTION FICHIER VIDE;
            else echo netgroup "$f" FICHIER OK;
            fi;
            done
    Quelqu'un pourrait-il m'eclairer la dessus ?
    merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Je suppose que tu souhaites faire la copie chaque fichier netgroup dans leur repertoire respectif?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cp "$f" $(dirname "$f")/netgroup.save.$(date +%Y%m%d-%H%M)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut
    Merci beaucoup , cela fonctionne.
    Ou avais-je péché ? cela vient du "*" ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 91
    Par défaut
    oui , tu ne peux pas créer un fichier avec comme un * dans le chemin car la wildcard matche avec plusieurs possibilités.
    Grosso modo, ton script disait de faire :
    Pour chaque zone de 1 à x , copier le netgroup dans une des zones comprises entre 1 et x. Le script ne peut pas déterminer de quelle zone il s'agit(le * du for n'est pas le même que le * du cp, ce n'est pas une variable)

    L'algo de Mygale permet de créer la copie dans le même dossier que le fichier source, en récupérant explicitement ce dossier avec la commande dirname.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut
    ok, merci a vous 2 pour vos explications, on y voit plus clair en effet.
    Dernière question, si jamais je souhaite copier uniquement mon fichier quand il ne fait pas 0 octet, dois je rajouter une condition dans la boucle ?
    En gros j aimerais mutualiser les 2 scripts.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Salut,

    man bash

    Tu peux tester la taille d'un fichier via l'option suivante:

    -s file
    True if file exists and has a size greater than zero.
    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if [[ -s testFile.txt ]]
    the 
     echo "Ce fichier existe et n\'est pas vide!"
    else 
     echo "Ce fichier existe mais est vide."
    fi

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 640
    Par défaut
    heu…
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ echo "foo" > fichier
    $ [ -s fichier ] && echo "existe, et n_est pas vide" || echo "n_existe pas, ou est vide"
    existe, et n_est pas vide
    $ >fichier
    $ [ -s fichier ] && echo "existe, et n_est pas vide" || echo "n_existe pas, ou est vide"
    n_existe pas, ou est vide
    $ rm fichier 
    $ [ -s fichier ] && echo "existe, et n_est pas vide" || echo "n_existe pas, ou est vide"
    n_existe pas, ou est vide
    pour savoir si le fichier existe ou pas, il faut ajouter un test -f
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 91
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    heu...pour savoir si le fichier existe ou pas, il faut ajouter un test -f
    En fait unedone ne veut pas savoir si le fichier existe ou pas, mais uniquement s'il faut le sauvegarder (en clair s'il existe ET contient des données)

    Donc comme le disait Mygale, le -s suffit.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut
    Effectivement, dans mon premier post j ai fait le test -s verifiant que le fichier n'est pas vide, merci mygale mais ce qui me pose probleme c'est le fait de le copier si et seulement si il n'est pas vide.
    le code que tu m'a mis (mygale) fait la meme chose que celui que j'ai mis, je voulais juste l'inclure dans le script de copie.
    je verifie la presence des mes fichier, tous ceux qui sont different de la taille 0 Octet, je les copie (car inutile de coipier un fichier vide).

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 640
    Par défaut
    J'ai repris Mygale1978, car si test -s échoue, on ne peut pas savoir si le fichier existe.
    Donc, dire «Ce fichier existe mais est vide.» pourrait induire en erreur les prochains lecteurs.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 91
    Par défaut
    OK, j'étais dans le sujet donc je ne voyais pas l'utilité de la clarification.
    Merci pour les futurs lecteurs

  12. #12
    Invité
    Invité(e)
    Par défaut
    Merci pour la rectification N_BAH.

    Citation Envoyé par unedone Voir le message
    Effectivement, dans mon premier post j ai fait le test -s verifiant que le fichier n'est pas vide, merci mygale mais ce qui me pose probleme c'est le fait de le copier si et seulement si il n'est pas vide.
    le code que tu m'a mis (mygale) fait la meme chose que celui que j'ai mis, je voulais juste l'inclure dans le script de copie.
    je verifie la presence des mes fichier, tous ceux qui sont different de la taille 0 Octet, je les copie (car inutile de coipier un fichier vide).
    Si on reprend ton ancien algorithme, on constate que:

    - tu as inversé les deux instructions => "-s" teste si le fichier à une taille > 0 octes et renvoie true si c'est le cas or dans ton cas tu dis que le fichier est vide...

    - tu dois tester la variable $f et pas fichier.

    - il devrait suffir de remplacer l'echo par le cp que je t'ai fourni précédemment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for f in /zone/*/root/var/yp/src/netgroup;
            do if test -s fichier;
            then echo netgroup "$f" ATTENTION FICHIER VIDE;
            else echo netgroup "$f" FICHIER OK;
            fi;
            done

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut
    Ok, donc cela donnerai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for f in /zone/*/root/var/yp/src/netgroup;
            do if test -s "$f";
            then cp "$f" $(dirname "$f")/netgroup.save.$(date +%Y%m%d-%H%M);
            else echo netgroup "$f" FICHIER VIDE > /etc/var/log/malog;
            fi;
            done

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

Discussions similaires

  1. Script Shell bash pour sauvegarder
    Par lolilol59 dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 17/04/2014, 13h05
  2. Question sur script de sauvegarde en shell
    Par zyriuse dans le forum Linux
    Réponses: 4
    Dernier message: 02/12/2009, 19h33
  3. Shell script de sauvegarde
    Par marza dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 22/11/2006, 22h32
  4. Parser une chaine en shell script
    Par Gogoye dans le forum Linux
    Réponses: 10
    Dernier message: 19/07/2004, 17h49
  5. Retour de requete postgresql / Shell Script
    Par doohan dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/06/2003, 18h07

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