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 :

[BASH] Test sur les dates


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Points : 7
    Points
    7
    Par défaut [BASH] Test sur les dates
    Bonjour,

    Je dois créer un script qui dans un certain nombre de dossiers prédéfinis, efface tous les fichiers logs qui sont vieux de, par exemple plus de 15 jours.

    Leur syntaxe est la suivante :
    nom_log.logs.date => testlog.logs.2011-04-24

    J'ai donc créé le script suivant (les tests à la fin ne sont bien évidemment pas complets, ne pas en tenir compte) :
    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
     
    #!/bin/bash
    year=$(date '+%Y')
    month=$(date '+%m')
    day=$(date '+%d')
     
    echo -e "Date d\'aujourd\'hui : $day / $month / $year\n"
     
    for fic in *
    do
     
    #Année/Mois/Jour du fichier de log
    year_file=$(echo $fic | cut -f3 -d . | cut -f1 -d -)
    month_file=$(echo $fic | cut -f3 -d . | cut -f2 -d -)
    day_file=$(echo $fic | cut -f3 -d . | cut -f3 -d -)
     
    let "diff_year=year-year_file"
    let "diff_month=month-month_file"
    let "diff_day=day-day_file"
     
    #test chaine vide pour les fichiers non logs
    if  [ -z $year_file ] ; then
    echo -e "$fic : Fichier à conserver\n"
    elif (($diff_year !=0)); then
    echo -e "$fic : Fichier à supprimer\n"
    else
    echo -e "$fic : Fichier à conserver\n"
    fi
    done
    J'arrive à extraire l'année, le mois et le jour de chaque fichier. Mais mon problème est que je n'arrive pas à établir de règle efficace concernant les tests à faire sur les "diff_year, diff_month, diff_day" pour l'effacement ou non des fichiers, en prenant en compte le changement d'un mois à l'autre, d'une année à une autre ... ( on ne peut pas simplement faire un diff_year!=0 et tout effacer, si on lance le script le 1er janvier et que le log date du 31 décembre).

    Voilà voilà, si quelqu'un a une solution ou une autre manière de procéder ...

    Merci !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 469
    Points
    19 469
    Par défaut
    Bonjour,

    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dateYa15jours=$(date -d-15days +'%Y%m%d')
    
    for fichier in *
    do #ne pas oublier de tester s'il s'agit bien d'un fichier
       fic="${fichier##*.}" #voir dans le man bash : Remplacement des paramètres
       if (( ${fic//-/} < dateYa15jours ))
       then echo "$fic"
       fi
    done

  3. #3
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Question con : les fichiers d'il y a 15 jours, ils ne datent pas (physiquement) d'il y a 15 jours ?

    Parce que si c'est le cas, un find . -mtime +14 devrait suffire

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Points : 7
    Points
    7
    Par défaut
    Effectivement ça peut simplifier beaucoup les choses, je ne connaissais pas l'option -mtime de la commande find (je suis encore trop jeune pour avoir lu les man de toutes les commandes en entier xD). J'ai juste à modifier la manière dont je traite le résultat de la commande.

    Merci beaucoup !

  5. #5
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    Citation Envoyé par pdavid Voir le message
    Effectivement ça peut simplifier beaucoup les choses, je ne connaissais pas l'option -mtime de la commande find (je suis encore trop jeune pour avoir lu les man de toutes les commandes en entier xD). J'ai juste à modifier la manière dont je traite le résultat de la commande.

    Merci beaucoup !
    quand tu connaitras toutes les man pages par coeur, y compris les private jokes qu'elles contiennent, tu seras un dieu

  6. #6
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Selon ce que tu souhaites faire ensuite, jette donc un oeil à l'option -exec de find si tu ne connais pas non plus :p

    (et t'inquiètes pas, même dans 50 ans, tu auras toujours des trucs à découvrir sur des commandes de bases...)

Discussions similaires

  1. Test sur les dates
    Par theolarrousse dans le forum SAS Base
    Réponses: 2
    Dernier message: 18/02/2015, 09h18
  2. [MySQL-5.6] TRIGGER avec test sur les minute d'une date
    Par Squale76 dans le forum Requêtes
    Réponses: 1
    Dernier message: 28/01/2015, 16h41
  3. Test sur les dates javascript
    Par mjs21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/06/2008, 10h50
  4. MS Access et TQuery (probleme sur les dates)
    Par Djob dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/06/2004, 14h57
  5. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 11h45

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