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 :

Supprimer les anciens dossiers


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 34
    Par défaut Supprimer les anciens dossiers
    Bonjour,

    J'ai un script shell qui crée les dossiers sous cette format:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    timestamp=`date +%s`
    GLOBAL_RESULT=tests/Global_result_$timestamp.txt
    donc à chaque exécution je génère un nouveau dossier de résultats.
    je veux en première étape supprimer les dossiers anciens qui datent de la veille.
    J'ai essayé cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dir=`date --date="-1 day" +%s`
    rm -rf tests/results_$dir
    Avez vous d'autres idées?

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 816
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ensienne Voir le message
    je veux en première étape supprimer les dossiers anciens qui datent de la veille.
    J'ai essayé cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dir=`date --date="-1 day" +%s`
    rm -rf tests/results_$dir
    Avez vous d'autres idées?
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find tests -maxdepth 1 -type d -name "results_*" -mtime +1 -exec rm -fr {} \;
    Ca te supprimera même les dossiers plus vieux éventuellement "oubliés"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 34
    Par défaut
    Merci.

    J'ai testé et ça ne fonctionne pas.
    Il ne supprime pas les dossiers

  4. #4
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 34
    Par défaut
    j'ai modifié comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find tests -maxdepth 1 -type d -name "results_*" -mtime -1 -exec rm -fr {} \;
    cela supprime tous les dossiers même récemment généré pas de la veille seulement.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find tests -maxdepth 1 -type d -name "results_*" -mtime +1 -exec rm -fr {} \;
    Ca te supprimera même les dossiers plus vieux éventuellement "oubliés"...
    Attention!
    Les spécifications manquant de précision, il peut y avoir un problème (pas forcément grave).

    Comme 'find -mtime' compare la date de modification, il peut arriver qu'un ancien répertoire ait été modifié récemment, auquel cas le répertoire peut survivre (potentiellement indéfiniment) au find+rm.

    La date d'un répertoire est modifiée lorsqu'on y ajoute, supprime ou renomme un fichier ou un sous-répertoire, ce qui est souvent le cas lorsqu'on ouvre avec un éditeur (comme vi, emacs ou un outil MS) l'un des fichiers, même pour une simple consultation (création d'un lock temporaire).

    Si ce risque existe et est considéré comme gênant, il faut effectivement tester le nom du fichier.

    Le code suivant supprime les répertoires dont la date portée dans le nom précède l'instant courant de plus de 1 jour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    now_1j=$(expr $(date +%s) - 60 * 60 * 24)
    for dir in tests/Global_result_*.txt ; do
        typeset date=${dir%.txt}
        date=${date#tests/Global_result_}
        if [[ ${date} -lt ${now_1j} ]]
        then rm -rf ${dir}
        fi
    done

  6. #6
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 34
    Par défaut
    J'ai testé le code donné et ça ne fonctionne pas.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par ensienne Voir le message
    J'ai testé le code donné et ça ne fonctionne pas.
    Alors c'est qu'il y a une erreur quelque part... qu'il faut corriger d'une certaine façon... de manière à changer le comportement et/ou supprimer les messages d'erreur...


    PS: en essayant de me situer au même niveau d'information...

  8. #8
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 34
    Par défaut
    le comportement demandé, vous l'avez bien décrit.

    timestamp=`date +%d_%H_%M_%s`
    les noms de mes dossier sont sous cette format results_$timestamp

    je veux supprimer à chaque fois les anciens dossiers qui datent de j-1.

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    D'abord:
    Citation Envoyé par ensienne Voir le message
    J'ai un script shell qui crée les dossiers sous cette format:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    timestamp=`date +%s`
    GLOBAL_RESULT=tests/Global_result_$timestamp.txt
    Puis:
    Citation Envoyé par ensienne Voir le message
    timestamp=`date +%d_%H_%M_%s`
    les noms de mes dossier sont sous cette format results_$timestamp
    Tiens! Tiens! Petit canaillou! Les spécifications auraient-elles évolué?

    Ceci pourrait-il avoir un impact sur le fonctionnement de la solution proposée?

    PS: Au cas où tu n'aurais pas compris mon humour:
    Ma boule de cristal est actuellement chez le réparateur pour une petite révision.
    Donc, lorsque tu obtiens une erreur, merci d'indiquer laquelle.
    Lorsque tu obtiens un comportement différent du comportement attendu, merci d'indiquer en quoi ils diffèrent.

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 816
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ensienne Voir le message
    Merci.

    J'ai testé et ça ne fonctionne pas.
    Il ne supprime pas les dossiers
    Oui enfin j'ai tapé ce find de mémoire sans vérifier. Déjà -maxdepth 1 suis pas certain. Peut-être que c'est plutôt -maxdepth 2 (s'il compte le dossier de départ pour 1).
    Ensuite j'ai mis -mtime (date de modification du contenu) mais peut-être que -ctime (date de création ou de modification de l'inode) est plus approprié.

    Donc ensuite ben t'es grand. Tu as une commande potentiellement intéressante, à toi de l'étudier aussi de ton coté (man). Par exemple essayer de remplacer -exec rm -rf {} \; par -print et tu verras si les dossiers concernés s'affichent ou pas...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. ASTUCE: Supprimer les anciens points de restauration
    Par devlopassion dans le forum Windows 7
    Réponses: 0
    Dernier message: 27/11/2011, 15h59
  2. Réponses: 3
    Dernier message: 03/04/2011, 21h25
  3. supprimer les anciens résultats
    Par kaayna dans le forum Requêtes
    Réponses: 5
    Dernier message: 26/04/2010, 13h43
  4. Réponses: 7
    Dernier message: 17/11/2007, 17h05
  5. supprimer les 6 plus ancien fichier
    Par popofpopof dans le forum VBScript
    Réponses: 15
    Dernier message: 16/11/2007, 11h05

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