Retourner aux forums || Retourner au forum Programmation.shell

Programmation.shell : Commande find

Posté par 桃白白 (page perso, ) le 09 septembre 2005
0
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.

> Lire le message (8 commentaires, moyenne: 1,1).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

man find

Posté par Vincent P (page perso, ) le 09/09/2005 à 12:16. (lien). Évalué à 1.

on y trouve :


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

RTFM...

-mtime <nbr_de_jours>

Posté par tgl () le 09/09/2005 à 12:17. (lien). É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 sifu () le 09/09/2005 à 12:23. (lien). É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 桃白白 (page perso, ) le 09/09/2005 à 13:06. (lien). É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 Ernest H (Jabber id, ) le 09/09/2005 à 13:29. (lien). É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 sifu () le 09/09/2005 à 14:17. (lien). É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.

      • [^]Re: mtime, atime et ctime

        Posté par Ernest H (Jabber id, ) le 09/09/2005 à 15:26. (lien). Évalué à 0.

        voici ma version de bash:

        % $SHELL --version
        zsh 4.2.3 (powerpc-apple-darwin8.0)

        désolé...

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell