web-dev-qa-db-fra.com

Comment utiliser 'find' pour rechercher des fichiers créés à une date précise?

Comment utiliser la commande UNIX find pour rechercher des fichiers créés à une date donnée?

243
sverrejoh

Comme l'a souligné Max, vous ne pouvez pas, mais vérifier les fichiers modifiés ou consultés n'est pas si difficile. J'ai écrit un tutoriel à ce sujet, pas plus tard qu'aujourd'hui. L'essentiel est d'utiliser -newerXY et ! -newerXY:

Exemple: pour trouver tous les fichiers modifiés le 7 juin 2007:

$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08

Pour retrouver tous les fichiers consultés le 29 septembre 2008:

$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30

Ou encore, les fichiers dont l'autorisation a été modifiée le même jour:

$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30

Si vous ne modifiez pas les autorisations sur le fichier, "c" correspondra normalement à la date de création.

305
Arve

find location -ctime time_period

Exemples de time_period:

  • Il y a plus de 30 jours: -ctime +30

  • Moins de 30 jours auparavant: -ctime -30

  • Il y a exactement 30 jours: -ctime 30

66
Chris

C'est deux étapes mais j'aime bien le faire de cette façon:

Commencez par créer un fichier avec une date/heure particulière. Dans ce cas, le dossier est le 2008-10-01 à minuit.

touch -t 0810010000 /tmp/t

Maintenant, nous pouvons trouver tous les fichiers plus récents ou plus anciens que le fichier ci-dessus (en passant par la date de modification du fichier. Vous pouvez également utiliser - une autre pour accéder et - cnewer le statut du fichier a été modifié. ).

find / -newer /tmp/t
find / -not -newer /tmp/t

Vous pouvez également consulter les fichiers entre certaines dates en créant deux fichiers tactiles.

touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2

Cela va trouver des fichiers entre les deux dates et heures

find / -newer /tmp/t1 -and -not -newer /tmp/t2
45
Mark Biek

Vous pourriez faire ceci:

find ./ -type f -ls |grep '10 Sep'

Exemple:

[root@pbx etc]# find /var/ -type f -ls | grep "Dec 24"
791235    4 -rw-r--r--   1 root     root           29 Dec 24 03:24 /var/lib/prelink/full
798227  288 -rw-r--r--   1 root     root       292323 Dec 24 23:53 /var/log/sa/sar24
797244  320 -rw-r--r--   1 root     root       321300 Dec 24 23:50 /var/log/sa/sa24
33
Jeff MacDonald

Tu ne peux pas. L'option -c vous indique la date de la dernière modification des autorisations, -a teste l'heure d'accès la plus récente et -m teste l'heure de modification. Le système de fichiers utilisé par la plupart des versions de Linux (ext3) ne prend pas en charge l'enregistrement "heure de création". Pardon!

12
Max Cantor

@ Max: a raison sur le moment de la création.

Toutefois, si vous souhaitez calculer l'argument jours écoulés pour l'un des paramètres -atime, -ctime, -mtime, vous pouvez utiliser l'expression suivante.

ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

Remplacez "2008-09-24" par la date souhaitée et ELAPSED_DAYS sera défini sur le nombre de jours compris entre cette date et la date d'aujourd'hui. (Mise à jour: soustrayez un du résultat pour l'aligner sur la date arrondie de find.)

Donc, pour trouver un fichier modifié le 24 septembre 2008, la commande serait:

find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

Cela fonctionnera si votre version de find ne prend pas en charge les prédicats -newerXY mentionnés dans la réponse de @Arve:.

8
yukondude

Avec les commutateurs -atime, -ctime et -mtime à rechercher, vous pouvez vous rapprocher de ce que vous souhaitez atteindre.

2
ayaz