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 :

Extraire un nombre d'un nom de dossier et lui soustraire 7


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
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut Extraire un nombre d'un nom de dossier et lui soustraire 7
    Bonjour,

    j'ai actuellement des dossiers du type JJ-MM-AAAA (aujourd'hui -> 09-06-2011).
    `echo dossier_en_question | cut -c1-2` me permet de récupérer 09 ici, mais je n'arrive pas à ensuite lui retrancher 7 (la variable est considéré comme un string et non pas un entier ?). Comment pourrais-je faire ?
    Merci d'avance.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 676
    Par défaut
    Bonjour,

    quel interpréteur de commande ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Merci pour la réponse

    L'interpréteur de commandes est Bash.
    Mais au temps pour moi, j'ai trouvé comment faire :
    expr `date +"%d"` - 7 (Ca marche vu que je l'utilise dans le script où les dossiers sont nommés, dossiers qui sont nommés avec la commande date)

    Mais maintenant j'aimerais savoir comment faire, par exemple, si le jour actuel est disons le 6 juillet. Je n'aimerais pas me retrouver avec -1 mais plutôt 30 (30 juin).

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 676
    Par défaut
    oui, on n'effectue pas de calcul directement sur des dates, mais sur des temps en secondes depuis Epoch, pour la raison que tu évoques entre autre.

    pour pouvoir trier correctement les fichiers ayant le même préfixe, la date dans leur nom devrait suivre le format YYYY-MM-DD, aussi parce que date -d YYYY-MM-DD +%s fonctionne sans triturage supplémentaire.

    en bash, il y a rarement besoin de cut, regarde dans le man bash, Remplacement des paramètres, ${paramètre:début:longueur}
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    La commande date que j'ai est bizarre et n'accepte pas certains paramètres (ton exemple notamment).

    Quoi qu'il en est, j'ai finalement décidé de renommer les dossiers en temps Epoch, et pour supprimer ceux datant d'une semaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    epoch=$(date +%s)
    datedujour=$(date +%d-%m-%y)
    mkdir $epoch/$datedujour
    dossierasupprimer=$(expr $epoch - 604800) # 604800 secondes = 7 jours
    if [ -d $dossierasupprimer ]; then
         rm -R $dossierasupprimer
    fi
    Je ne peux pas vraiment le tester en conditions réelles (il me faudrait au moins une semaine et un jour pour le faire ^^) mais ça semble fonctionner.
    Le script s'exécute toujours à la même heure, tous les jours, donc ce devrait être bon mais le problème est que la "solution" (avoir des dossiers du genre 1307619520/09-06-11) est très peu élégante, et c'est fastidieux quand on recherche un jour particulier : il faut les ouvrir un à un, même si sur 7 jours cela ne fait pas beaucoup.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Tu peux garder tes noms de dossiers au format que tu veux. Il te suffit pour le traitement de les convertir au format YYYY-MM-DD (qui soit dit en passant est infiniment mieux que DD-MM-YYYY puisque tu as un ordre alphabétique identique à l'ordre chronologique), et d'utiliser date -d pour avoir la date 7 jours avant. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    date -d "2011-06-06 - 7 days" +%Y-%m-%d
    2011-05-30

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 676
    Par défaut
    La commande date que j'ai est bizarre et n'accepte pas certains paramètres (ton exemple notamment).
    tu n'es probablement pas sur un système GNU; ou alors tu as tapé la "commande" telle quelle, alors que ce n'en était pas vraiment une, mais un exemple de format.

    Je voyais plutôt, sur un système GNU :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
     
    rep=ton_Repertoire
    aujourdhui=$(date +%s)
    for file in $rep/*
    do if [ -d "$file" ] && (( $(date -d "$file +604800seconds") <= aujourdhui )); then rm -R "$file"; fi
    done
    bien que la commande GNU date permette de retrouver la date d'un fichier avec l'option -r.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. [Débutant] détecter nombres dans un string et noms dans dossier
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 4
    Dernier message: 22/02/2012, 11h45
  2. [Batch] Extraire nom dernier dossier d'un chemin
    Par terrance dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 28/12/2009, 09h45
  3. extraire le nom du dossier du path
    Par f117azouz dans le forum C++Builder
    Réponses: 6
    Dernier message: 05/01/2008, 08h28
  4. Réponses: 4
    Dernier message: 06/06/2004, 12h07
  5. [LG]Extraire des nombres d'une chaine
    Par audreym31 dans le forum Langage
    Réponses: 4
    Dernier message: 18/01/2004, 21h24

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