Comment utiliser la commande UNIX find
pour rechercher des fichiers créés à une date spécifique?
Comment utiliser la commande UNIX find
pour rechercher des fichiers créés à une date spécifique?
Réponses:
Comme l'a souligné Max, vous ne pouvez pas, mais vérifier les fichiers modifiés ou accessibles n'est pas si difficile. J'ai écrit un tutoriel à ce sujet jusqu'à aujourd'hui. Dont l'essence est d'utiliser -newerXY
et ! -newerXY
:
Exemple: pour rechercher 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, 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» correspond normalement à la date de création, cependant.
-newerBt
correspondra à l' heure de naissance (création) du fichier .
-newerxt
est disponible sur FreeBSD depuis 2001 (où il a été fourni pour la première fois en tant que correctif en 1998), quelques autres BSD et GNU find (depuis 4.3.3 en 2007), basés sur HP / UX find, qui a introduit -newerXY
(mais où Y == t n'est pas pris en charge).
find location -ctime time_period
Exemples de time_period:
Il y a plus de 30 jours: -ctime +30
Il y a moins de 30 jours: -ctime -30
Il y a exactement 30 jours: -ctime 30
ctime
n'a rien à voir avec le temps de création , c'est le temps de changement d'inode.
C'est deux étapes mais j'aime le faire de cette façon:
Créez d'abord 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 fonction de la date de modification du fichier. Vous pouvez également utiliser -anewer pour accéder et -cnewer fichier statut changé).
find / -newer /tmp/t
find / -not -newer /tmp/t
Vous pouvez également consulter des fichiers entre certaines dates en créant deux fichiers avec contact
touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2
Cela trouvera des fichiers entre les deux dates et heures
find / -newer /tmp/t1 -and -not -newer /tmp/t2
find
qui manque-newerXY
Vous pouvez 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
stat
si vous ne l'avez pas find -printf
.
Tu ne peux pas. Le commutateur -c vous indique quand les autorisations ont été modifiées pour la dernière fois, -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 un enregistrement "heure de création". Désolé!
@Max: a raison sur le temps de création.
Toutefois, si vous voulez calculer l'argument jours écoulé pour l' un des -atime
, -ctime
, des -mtime
paramètres, 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 de votre choix et ELAPSED_DAYS sera défini sur le nombre de jours entre cette date et aujourd'hui. (Mise à jour: soustrayez un du résultat pour l'aligner avec find
l'arrondissement de la date de.)
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 -newerXY
prédicats mentionnés dans la réponse de @Arve :.
J'ai trouvé ce scriplet dans un script qui supprime tous les fichiers de plus de 14 jours:
CNT=0
for i in $(find -type f -ctime +14); do
((CNT = CNT + 1))
echo -n "." >> $PROGRESS
rm -f $i
done
echo deleted $CNT files, done at $(date "+%H:%M:%S") >> $LOG
Je pense qu'un peu de "man find" supplémentaire et la recherche des paramètres -ctime / -atime etc. vous aideront ici.