Comment utiliser «rechercher» pour rechercher des fichiers créés à une date spécifique? [fermé]


254

Comment utiliser la commande UNIX findpour rechercher des fichiers créés à une date spécifique?


8
Il semble que les questions de script bash soient autorisées.
— Alan

@MichaelScheper: Je ne sais même pas par où commencer avec ce commentaire.
— Courses de légèreté en orbite

1
@Notinlist: Voici la réponse: meta.stackexchange.com/questions/10249/… Malheureusement, il s'avère qu'un délai a expiré. Dommage, car les recherches sur le Web arrivent toujours ici, et la réponse acceptée a été utile pour beaucoup de gens.
— Michael Scheper

@MichaelScheper: Si vous pouvez trouver une option pour voter pour migrer vers unix.stackexchange.com, indiquez-moi par là. Puisque vous n'avez pas le représentant pour voir la boîte de dialogue de fermeture, je vais vous donner un indice: il n'y en a pas. Pensez à être moins combatif lorsque vous ne savez pas de quoi vous parlez. Merci de votre attention.
— Courses de légèreté en orbite

5
@LightnessRacesinOrbit: Je m'excuse d'être apparu comme «combatif». Je ne suis pas autorisé à modifier mes commentaires, mais pour référence future, est-ce mon commentaire louant la question qui vous a offensé? Je dois dire que je me sens un peu aveugle, même après avoir donné à votre commentaire précédent le bénéfice du doute. J'essayais en fait d'être plus constructif que d'ajouter un autre «moi aussi», en cherchant comment fonctionne la migration: meta.stackexchange.com/a/10250/249555 Le délai de 60 jours cache cette option, peut-être? Désolé pour le bum steer. Merci encore - sincèrement - pour votre temps et votre attention.
— Michael Scheper

Réponses:


323

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 -newerXYet ! -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.


7
Ma version de find (GNU 4.2.32) ne semble pas prendre en charge les prédicats -newerXY. Une version minimale particulière est-elle nécessaire? Ou s'agit-il de compiler find avec un commutateur de configuration spécial?
— yukondude

1
@yukondude: Tu as raison. La version de find que j'ai localement - GNU 4.4.0 - l'a, contrairement à 4.1.20 que j'ai sur Dreamhost. Le kludge avec la création de deux fichiers devrait fonctionner dans l'un ou l'autre, cependant.
— Arve

1
Sur certains systèmes (FreeBSD, OS / X ...) -newerBtcorrespondra à l' heure de naissance (création) du fichier .
— Stephane Chazelas

3
Notez que le -newerxtest 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).
— Stéphane Chazelas

En utilisant: find (GNU findutils) 4.4.0, cette syntaxe ne fonctionne pas sur SUSE ext3, si elle est censée répertorier les fichiers / w mtime à cette date, elle ne renvoie rien
— niken

68

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


7
Le problème est que je veux tester pour une date spécifique, pas dans une période de temps.
— sverrejoh

1
Donc, déterminez combien il y a de jours et utilisez ce nombre.
— jmanning2k

15
ctimen'a rien à voir avec le temps de création , c'est le temps de changement d'inode.
— Stephane Chazelas

47

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

3
+1 pour solution à un ancien findqui manque-newerXY
— Felipe Alvarez

1
OMI, en ce moment, cela devrait être la solution acceptée. Je n'ai pas pu faire fonctionner -newermt sur le noyau 2.6.18-348.18.1.el5, sans parler des noyaux plus récents.
— DarkForce

Même chose ici DarkForce, la fonctionnalité newermt semble être très très
— bancale

34

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

C'est ce que la plupart des gens veulent, mais il n'a pas reçu suffisamment de votes positifs !!!
— 2015

2
cela peut ne pas fonctionner si vous disposez de quelques millions de fichiers dans un seul répertoire.
— Dennis Nolte

3
Il y a des effets secondaires si le terme de recherche grep est dans le nom du fichier.
— Snorex

mywiki.wooledge.org/ParsingLs - une meilleure approche consiste probablement à imprimer la date de création sous une forme lisible par machine, peut-être avec statsi vous ne l'avez pas find -printf.
— tripleee

12

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é!


7
En fait, ce n'est pas seulement le type de système de fichiers - il n'y a pas d'interface système pour obtenir de telles informations, même si le système de fichiers les détenait. L'une des lacunes d'Unix remontant aux premiers jours, c'est pourquoi Unix ne décollera jamais.
— chrisdowney

1
Unix ne décollera jamais?
— lucid_dreamer

8

@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 -mtimeparamè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 findl'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 findne prend pas en charge les -newerXYprédicats mentionnés dans la réponse de @Arve :.


2

Avec les commutateurs -atime, -ctime et -mtime à rechercher, vous pouvez vous rapprocher de ce que vous voulez réaliser.


-3
cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir

1
Pourquoi copiez-vous les fichiers? Outre la commande en `ls ...`travaux, il n'utilise pas l' findoutil.
— Yamaneko

-5

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.