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

Scripts/Batch Discussion :

Supprimer le plus ancien fichier dans une arborescence


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 4
    Par défaut Supprimer le plus ancien fichier dans une arborescence
    Bonjour à tous,

    Je sèche un peu sur une problématique, je veux créer un script de rotation de log assez spécial: tout d'abord j'ai une arborescence de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        
    Dossier_racine : 
          -> Dossier1:
                  -> log1
                  -> log2
                  -> ....
          -> Dossier2:
                  -> log1
                  -> log2
                  -> ....
          -> etc
                  -> etc
                  -> etc
                  -> etc
    Dans ces dossiers, j'ai un nombre variable de logs qui sont stockes, ce que je veux c'est ne garder que les 3 derniers logs (jamais moins et je ne fais rien si j'ai moins de 3 logs dans le dossier).

    Problème, l'arborescence est très volumineuse (~env 10000 fichiers) et je ne peux pas savoir la date la plus ancienne (comprenez, je ne peux pas supprimer tout les logs > à 30 jours par exemple).

    En bref, avez vous une solution pour, dans un dossier, comparez tous les fichiers présents dans celui-ci et ne gardez que les 3 plus récents?

    Voici le morceau de code qui récupère l'arbo actuellement, il manque la comparaison justement....

    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
    30
    31
    32
    33
    34
    35
    36
    37
    $LogDir = "mon emplacement de log"
    
    $date = Get-Date
     
    $verify_log_dir = Test-Path $LogDir
    if ($verify_log_dir) 
     {
       write-host "Succeed"
     }
     else {
       Write-Host "Error:  Log directory $LogDir does not exist."
       exit
     }
     
    $logs_root = Get-ChildItem -Directory -recurse $LogDir 
     
    if ($logs_root) 
    {
       foreach ($file in $logs_root) 
       {
           if ($file.Attributes -eq "Directory")
                {
                    $contenu = Get-ChildItem $file.FullName  
                    write-host "dossier parent :" $file.name
                    if ($contenu.count -gt 3)
                    {
                         foreach ($fichier in $contenu)
                         {
                           write-host $fichier.Name
                           //FIXME : LA COMPARAISON
                         }
                     }
                 }
        }
    
    }
    Merci d'avance et bonne soirée

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    un regroupement suivi d'un tri, puis terminer avec une sélection est possible :
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    cd c:\temp
    md testlog
    cd testlog
    foreach ($Name in 1..5) { 
     md "Test$name"
     cd "Test$name"
     1..5|% {"Test $_" > "Log$_.txt";Sleep -s 1 }
     cd ..
    }
     
    $Logs=Dir *.txt -rec -File|Group-Object -Property DirectoryName
    $Logs|% {
     $_.group|sort LastWriteTime|Select -first 3
    }
    Ce n'est pas pas la meilleure solution, mais juste son début

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 4
    Par défaut
    Merci pour la réponse !

    Le problème de ton idée c'est que je ne veux justement pas regrouper les fichiers, j'aimerais (enfin c est comme ca que j'ai articulé mon code) que le programme fasse le tri dans tous les dossiers mais de manièere independante.

    Ex avec mon arborescence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dossier_racine : 
          -> Dossier1:
                  -> log1
                  -> log2
                  -> ....
          -> Dossier2:
                  -> log1
                  -> log2
                  -> ....
          -> etc
                  -> etc
                  -> etc
                  -> etc
    Le programme va à la racine, rentre dans le dossier1, compare les logs présents dans ce dossier, si il y en a plus de 3 -> il ne garde que les 3 plus récents et supprime les autres. Puis passe au dossier2 etc...

    j'arrive sans soucis à faire la séquence de parcours de l'arbo, ce qui me manque c'est le tri :/

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Dinouit Voir le message
    Le problème de ton idée c'est que je ne veux justement pas regrouper les fichiers, j'aimerais (enfin c est comme ca que j'ai articulé mon code) que le programme fasse le tri dans tous les dossiers mais de manièere independante.
    Oui je sais il n'est pas nécessaire de collecter TOUS les fichiers en mémoire avant le traitement, mais uniquement ceux du répertoire en cours d'analyse.
    Citation Envoyé par Dinouit Voir le message
    ce qui me manque c'est le tri :/
    Pourtant dans l'exemple il me semble en avoir utilisé un

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/12/2008, 12h23
  2. [batch file] detruire des fichiers dans une arborescence
    Par Biosox dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 03/06/2008, 10h10
  3. Compter le nombre de fichiers dans une arborescence
    Par Olivier Regnier dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 22/08/2007, 10h29
  4. Récupération de fichiers dans une arborescence
    Par bibilolo2 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 04/05/2007, 22h19
  5. chercher un fichier dans une arborescence
    Par diamonds dans le forum Entrée/Sortie
    Réponses: 15
    Dernier message: 16/03/2007, 14h27

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