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 :

Aide de demarrage sur un script perso


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut Aide de demarrage sur un script perso
    Bonjour,

    Je vous sollicite pour vous demander une aide sur mon script :

    Je souhaite que mon script supprime un dossier de plus de 31 jours à partir de la date de creation du dossier en question.

    Dites moi si je fais fausse route dans la construction :

    les dossiers sous sous cette forme :
    |
    | jours |
    -----------| 10-11-2008
    -----------| 11-11-2008
    -----------| 12-11-2008

    * j'affiche la date du jour
    * j'extrais la date du jour en prenant le nombre du jour en variable (a)
    * je liste le contenu du dossier jours en faisant une boucle (for)
    * je mets en variable (b) la liste
    * j'extrais le nombre du jour (qui etait le nom du dossier) en variable (c)
    * avec une condition : si c + 31 > a alors supprimer le dossier

    Est-ce que ma théorie est bonne ? ou y a t-il plus simple ?

  2. #2
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonjour,

    C'est pas très clair:
    • j'affiche la date du jour --> pourquoi pas.
    • j'extrais la date du jour en prenant le nombre du jour en variable (a) --> gni? Si on est le 14 nov, tu récupères 14, c'est ça?
    • je liste le contenu du dossier jours en faisant une boucle (for) --> pourquoi pas faire un ls ou un echo *?
    • je mets en variable (b) la liste --> dans la même commande que la ligne précédente.
    • j'extrais le nombre du jour (qui etait le nom du dossier) en variable (c) --> c'est la date du mois?
    • avec une condition : si c + 31 > a alors supprimer le dossier --> si a est une date dans le mois, alors la condition c + 31 > a sera (quasiment) toujours vraie puisque a <= 31.
    Sans savoir exactement ce que tu fais, difficile de te donner des conseils...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut
    Effectivement, voici d'autres explications auquelles je reponds en italique :

    J'affiche en gras, ce qui est valide, vrai et applicable.


    * j'affiche la date du jour --> pourquoi pas.
    * j'extrais la date du jour en prenant le nombre du jour en variable (a) --> gni? Si on est le 14-11-2008, tu récupères 14, c'est ça? Oui
    * je liste le contenu du dossier jours en faisant un ls --> pourquoi pas faire un ls ou un echo *? oui, un ls
    * je mets en variable (b) la liste --> dans la même commande que la ligne précédente.
    * j'extrais le nombre du jour de la variable (b) et je cree la variable (c) qui correspond au jour : exemple : pour le dossier 12-11-2008 ; la variable (c) sera 12 --> c'est la date du mois?
    * Je dis alors avec une condition : si c + 31 < a alors ne pas supprimer le dossier sinon le supprimer --> si a est une date dans le mois, alors la condition c + 31 > a sera (quasiment) toujours vraie puisque a <= 31.
    exemple sur ce dernier point : si c (12, dans mon exemple) + 31 < a (14, dans notre exemple)

    Exact ; dans un cas ou dans l'autre ; çà ne marche pas ; je pense qu'il faut que je recupere aussi la variable du mois et mettre une sous condition.

  4. #4
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Tu peux utiliser find -exec sinon
    http://man.developpez.com/man1/find.1.php
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  5. #5
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Il ne faut pas ré-inventer la roue. Comme c'est un nombre de jours depuis maintenant, comme l'a dit ggnore, la commande find peut faire ça très bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if [ "$(find dir -daystart -atime +31)" = "" ]
    then
        echo "Fichiers trop jeunes"
    else
        rm -rf dir
    fi
    J'imagine qu'il faudra paramétrer dir.

  6. #6
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    comme l'a dit ggnore, le paramètre exec de la commande find simpifie la tâche.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find /home/user -type d -mtime +31 -exec rm -rf {} \;
    Cette commande supprimera tous les réperoires à partir de "/home/user" de plus de 31 jours.
    Un petit "man find" te donnera tous les paramètres de cette commande fort utile.

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

Discussions similaires

  1. demande d'aide sur un script
    Par threepwood dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 24/05/2007, 11h45
  2. Programme pour booter au demarrage sur un script
    Par undercrash dans le forum Linux
    Réponses: 3
    Dernier message: 01/03/2007, 14h43
  3. Aide sur un script
    Par odrimont dans le forum Linux
    Réponses: 13
    Dernier message: 03/07/2006, 23h03
  4. A l'aide svp j'ai de gros problemes sur un script php
    Par schtek2 dans le forum Langage
    Réponses: 1
    Dernier message: 24/04/2006, 01h25
  5. Besoin d'aide sur un script SQL de recherche
    Par agougeon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/10/2005, 11h40

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