80 votes

Linux : utilisation de find pour localiser les fichiers plus anciens que <date>

find a un bon support pour trouver les fichiers les plus modifiés il y a moins de X jours, mais comment puis-je utiliser find pour localiser tous les fichiers modifiés avant une certaine date ?

Je ne trouve rien dans le find pour faire cela, seulement pour comparer avec l'heure d'un autre fichier ou pour vérifier les différences entre l'heure de création et maintenant. Est-ce que la création d'un fichier avec l'heure souhaitée et la comparaison avec ce fichier est la seule façon de faire cela ?

87voto

jason saldo Points 5036

Non, vous pouvez utiliser une chaîne de date/heure.

En man find :

-Nouvelle référence XY
Compare l'horodatage du fichier actuel avec la référence. L'argument de référence de référence est normalement le nom o (et l'un de ses horodatages est utilisé pour la comparaison) mais il peut aussi être une chaîne de caractères décrivant un temps absolu. X et Y sont des caractères de substitution pour d'autres lettres, et ces lettres sélectionnent quel temps appartenant à la référence est utilisé pour la comparaison.

          a   The access time of the file reference
          B   The birth time of the file reference
          c   The inode status change time of reference
          m   The modification time of the file reference
          t   reference is interpreted directly as a time

Beispiel:

find -newermt "mar 03, 2010" -ls
find -newermt yesterday -ls
find -newermt "mar 03, 2010 09:00" -not -newermt "mar 11, 2010" -ls

51voto

Milky Points 216

Ce n'est pas directement lié à la question, mais cela pourrait être intéressant pour ceux qui tombent ici.

trouver ne supporte pas directement le paramètre -older pour trouver des fichiers plus anciens qu'une date donnée, mais vous pouvez utiliser l'instruction negate (en utilisant l'exemple de la réponse acceptée) :

touch -t 201003160120 some_file
find . ! -newer some_file

retournera les fichiers plus vieux que la date prévue.

40voto

Andy Points 21

Si vous avez seulement '-newer file', vous pouvez utiliser cette solution de contournement :

# create 'some_file' having a creation date of 16 Mar 2010:
touch -t 201003160120 some_file

# find all files created after this date
find . -newer some_file

toucher l'homme :

  -t STAMP
          use [[CC]YY]MMDDhhmm[.ss] instead of current time

En supposant que votre Touch dispose de cette option (le mien est un Touch 5.97).

21voto

markus_b Points 351
find <dir> -mtime -20

cette commande find trouvera les fichiers modifiés au cours des 20 derniers jours.

  • mtime -> modifié (atime=accessed, ctime=created)
  • -20 -> moins de 20 jours (20 exactement 20 jours, +20 plus de 20 jours)

Vous pouvez ajouter des limitations supplémentaires comme :

find <dir> -mtime -20 -name "*.txt"

la même chose que précédemment, mais ne trouve que les fichiers se terminant par '.txt'.

10voto

MortenSickel Points 193

Juste pour ajouter - vous pouvez même utiliser deux arguments newermt pour rechercher dans un intervalle de temps :

find ! -newermt "apr 01 2007" -newermt "mar 01 2007" -ls

pour trouver tous les fichiers de mars 2007.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X