Forum Programmation.shell Commande find

Posté par  .
Étiquettes : aucune
0
9
sept.
2005

Bonjour,

je souhaite propgrammer un tâche cron qui va m'effacer tous les fichiers plus vieux de 4 semaines dans un répertoire. Je pensais qu'un truc comme cela ce faisait bien avec la commande find. Cependant je n'arrive pas à trouver l'option qui va bien. J'ai bien pensé à utiliser l'option newer, mais ca m'obligerai a faire "touch fichieridiot" avant de lancer la commande (afin de comparer l'age des fichiers avec l'age du fichier idiot). Je suis sûr qu'il y a plus simple qui doit passer en une seule ligne.

Quelqu'un a-t-il une idée.

D'avances mille mercis.

  • # man find

    Posté par  (site web personnel) . Évalué à 1.

    on y trouve :


    -atime n
    File was last accessed n*24 hours ago.

    RTFM...
  • # -mtime <nbr_de_jours>

    Posté par  . Évalué à 2.

    "find /ton/répertoire -mtime 28 -exec rm -f {} \;" devrait effacer tes fichier vieux de plus de 4 semaines.

    Sinon, tu peut toujours regarder du côté de tmpwatch ou tmpreaper, qui sont deux programmes spécialisés dans ce genre de nettoyage (enfin, ça devient intérressant surtout pour nettoyer une arborescence, y compris les sous-répertoires, mais dans ton cas find fera bien l'affaire).
  • # mtime, atime et ctime

    Posté par  . Évalué à 5.

    Bonjour,

    Je pense qu'avec les options mtime, atime et ctime de find cela devrait être possible. Il faut choisir l'option qui correspond au besoin.

    La commande suivante listera par exemple les fichiers vieux (fichiers modifiés) de plus de 3 jours:
    find /tmp -type f -mtime +3

    En utilisant, xargs il est possible de les effacer:
    find /tmp -type f -mtime +3 | xargs -r -n 10 rm

    L'option r permet de ne rien lancer s'il n'y a pas de fichier et l'option n 10 permet de lancer la commande sur des paquets de 10 fichiers.

    Cette dernière peut-être utile quand les listes sont trop longues...

    Il est possible d'utiliser l'option exec pour faire la même chose:
    find /tmp -type f -mtime +3 -exec rm {} \;

    Mais ceci lancera la commande à chaque fichier.

    Sifu

    • [^] # Re: mtime, atime et ctime

      Posté par  . Évalué à 0.

      Merci, effectivement ca ca marche. Je n'avais pas compris l'option de mettre +28 pour plus vieux de 28 jours. Moi j'essayais des trucs du type find . -mtime 28 et la effectivement ca ne marchais pas.

      Merci.
    • [^] # Re: mtime, atime et ctime

      Posté par  (site web personnel) . Évalué à 0.

      j'aurais fait

      rm **/*(mM+1^/)

      (efface tous les fichiers pas repertoires qui ont pour la dernière fois été modifiés il y a au moins un mois)
      • [^] # Re: mtime, atime et ctime

        Posté par  . Évalué à 3.

        > rm **/*(mM+1^/)

        Je serais preneur d'un peu plus d'explications. Car chez moi, j'ai le résultat suivant:
        bash: syntax error near unexpected token `**/*(m'

        Merci.

        PS: Voici ma version de bash:
        # bash --version
        GNU bash, version 2.05a.0(1)-release (i386-pc-linux-gnu)
        Copyright 2001 Free Software Foundation, Inc.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.