Rechercher des fichiers plus récents que 15 secondes mais plus anciens que 2 secondes

17

Je souhaite rechercher des fichiers dont la taille est inférieure à 15 secondes mais antérieure à 2 secondes. Voici le script que j'utilise actuellement qui récupère les fichiers de moins de 15 secondes:

find /my/directory -name '*.jpg' -not -newermt '-15 seconds'

Toute aide est grandement appréciée

Yllier123
la source
2
Quel système d'exploitation utilisez-vous? Il existe des différences dans les findimplémentations.
terdon
Un fichier modifié il y a exactement 2 secondes doit-il correspondre? Qu'en est-il d'un fichier modifié il y a exactement 15 secondes?
Mikel
Plus récent que 2 secondes au début du script ou à la fin?
Stéphane Chazelas
@Mikel, ce n'est probablement pas pertinent car les horloges ont une résolution en nanosecondes de nos jours.
Stéphane Chazelas
1
Ok ... puisque personne d'autre ne demande ... @ Yllier123 pourquoi avez-vous besoin de trouver des fichiers créés entre 2 <x <15 sec? Je suis juste curieux.
C Bauer

Réponses:

17

Vous pouvez combiner plusieurs prédicats en les chaînant.

Il n'y a pas -oldermt, mais vous pouvez écrire cela comme -not -newermt.

Tu veux:

  • -newermt '-15 seconds' dire que le fichier a moins de 15 secondes, et
  • -not -newermt '-2 seconds' dire que le fichier a plus de 2 secondes

Essayer:

find /my/directory -newermt '-15 seconds' -not -newermt '-2 seconds'

Ou, pour être conforme à POSIX:

find /my/directory -newermt '-15 seconds' \! -newermt '-2 seconds'

Aussi, juste pour que vous (et les autres lecteurs) le sachiez, "plus récent" signifie modifié plus récemment que, pas créé plus récemment que.

Mikel
la source
3
Agréable. Notez que -not -newermt '-2 seconds'cela correspondra également aux fichiers datant de 2 secondes exactement. Utilisez-les également -not -newermt '3 seconds'pour les exclure.
terdon
1
Oui, les cas de bord sont toujours amusants. Je ne sais pas vraiment quelle résolution il utilise pour ces comparaisons. Mon hypothèse est que tout ce qui a été modifié il y a ~ 2.000000001 secondes est une correspondance, mais cela dépendra également de votre système de fichiers et de votre système d'exploitation.
Mikel
Bon point, je n'ai aucune idée de la résolution. Je viens de tester touch -d "2 seconds ago" file; find . -newermt '-15 seconds' -not -newermt '-2 seconds'et d'obtenir file.
terdon
@terdon Eh bien, cela dépend si les horodatages ont une résolution plus précise qu'une seconde; cela dépendra du système, du système de fichiers et peut même varier entre les fichiers du même système de fichiers s'il est utilisé par plusieurs machines différentes.
Blacklight Shining du
"plus récent" signifie "plus récemment que". C'est le "m" qui signifie "modifié".
OrangeDog
4

Vous n'avez pas mentionné votre système d'exploitation ....

Cela fonctionne très bien avec une implémentation de recherche moderne comme celle de FreeBSD ou avec sfind.

find /my/directory -name '*.jpg' -mtime -15s -mtime +2s

Sfind fait partie des outils Schily: http://sourceforge.net/projects/schilytools/files/

AVERTISSEMENT: je viens de découvrir un problème dans sfind. Si les -mtimearguments sont inférieurs à 60 s, cela ne fonctionnera pas correctement car les heures de fichier sont actuellement comparées à un horodatage de 60 secondes à l'avenir qui a été initialement calculé pour le changement d'année pour -ls.

BTW: -notn'appartient pas à find, c'est un GNUisme non portable.

schily
la source
1
Il y a le bashtag… Donc l'environnement pourrait être Cygwin, Debian GNU / Hurd, bashfonctionnant sur FreeBSD ou Solaris,… ;-)
phk
Pour GNU find, il semble que les décimales, bien que folles, puissent être utilisées comme solution de contournement.
Arthur2e5
La recherche POSIX a !pour -not as! expression . Donc, ce n'est pas grave.
@phk C'est pourquoi j'ai mentionné la méthode qui fonctionne avec une norme améliorée primaryde findpour informer les gens qu'il n'est pas nécessaire d'ajouter toujours de nouveaux éléments primariesà rechercher pour pouvoir améliorer les fonctionnalités. BTW: Un correctif libfinda été publié dans le schily tools.
schily
@BinaryZebra, le problème est que vous avez gfindajouté l' -notalias. Cela n'a jamais été nécessaire et sa présence peut être considérée comme une stratégie de verrouillage des fournisseurs.
schily