Trouver tous les fichiers de plus d'une minute

8

Comment puis-je utiliser findpour sélectionner des fichiers qui ont été écrits et non modifiés à la dernière minute?

Je sais que je peux faire l'inverse, trouver des fichiers modifiés au cours des 60 dernières secondes avec -mtime -60s, mais je veux ceux qui n'ont pas été modifiés au cours des 60 dernières secondes.

J'utilise Linux et j'obtiens cette erreur si j'utilise des secondes:

find ??/ -mtime +60s -name blah.tsv
find: invalid argument `+60s' to `-mtime'
719016
la source

Réponses:

13

Utilisation find /path -type f -mtime +60s

Le -juste avant les chiffres n'est pas un "tiret d'argument" régulier, mais signifie "moins de". +est alors "plus que".

De man find:

Toutes les primaires qui prennent un argument numérique permettent au nombre d'être précédé d'un signe plus (`` + '') ou d'un signe moins (`` - ''). Un signe plus précédent signifie `` plus de n '', un signe moins précédent signifie `` moins de n '' et ni l'un ni l'autre ne signifie `` exactement n ''.

Il est à noter que pour exactement n , le temps est arrondi. Donc 1(1 jour) ne signifie pas 86400 secondes.

Daniel Beck
la source
2
À proprement parler, +60n'est pas l'opposé de -60, pour la même raison moins que n'est pas l'opposé de plus de : Les deux excluent la valeur exacte à laquelle ils se comparent. Mais votre question n'indique pas quel comportement vous voulez exactement.
Daniel Beck
Ce n'est pas exactement la même chose, puisque! rétablit la "requête" d'origine. Mais d'accord, le PO ne précise pas ce qu'il veut.
Karolos
Le lendemain, l'OP a déclaré que c'était sur Linux, pas sur Mac OS X. Si cela aurait changé la réponse, pouvez-vous le mettre à jour?
Peter Mortensen
1
Oui, cela ne fonctionne pas sous Linux. Au moins RHEL 5.6. La réponse de SiegeX ci-dessous fonctionne cependant.
MattPark
2
Cela ne fonctionne pas sur CentOS. Comme supposé, cela fonctionne sous Mac OS X
trante
14
find . -type f -mmin +1

Exemple

$ ls *
four.txt  one.txt  three.txt  two.txt

$ touch foo && find . -mmin +1
.
./three.txt
./four.txt
./two.txt
./one.txt
SiegeX
la source
Il n'est plus tagué avec osx.
Peter Mortensen
4

Le second -dans -mtime -60sn'est pas un délimiteur d'option.

-mtimeest une option, et elle est suivie d'un argument d'option . L'argument option est -60s, et le -contenu fait partie de l'argument option lui-même, pas un délimiteur d'option. Cela signifie "moins de 60 secondes". Les arguments d'option 60set +60ssignifient respectivement "égal à 60 secondes" et "supérieur à 60 secondes".

Le manuel Apple MacOS et le manuel FreeBSD mentionnent les préfixes +et -en un seul endroit, et oublient d'expliquer où ils sont. Voilà ce qu'ils sont.

(Le manuel GNU Info pour GNU finda la même omission, ce qui est intéressant. Cependant, findla syntaxe de GNU pour l'époque est quelque peu différente de la findsyntaxe BSD et MacOS .)

Lectures complémentaires

  • Apple incorporé (2008-02-24). findPage de manuel de MacOS 10 . Bibliothèque pour développeurs MacOS 10.
  • find(1) . 17/03/2010. Manuel des commandes générales de FreeBSD. Projet FreeBSD.
JdeBP
la source
1
C'est encore pire que de simplement l'expliquer en un seul endroit : toutes les autres options se réfèrent au atimeformat de l'heure, mais cela n'explique pas non plus les préfixes . Il s'agit d'une section distincte qui n'est pas référencée.
Daniel Beck
En effet; et vous constaterez que j'ai écrit cela. J'ai écrit "mentionner" et "oublier d'expliquer n'importe où". ☺
JdeBP
Je ne voulais pas vous contredire, je voulais juste souligner que le même endroit est également le pire endroit possible d'un point de vue "disons simplement parcourir la page de manuel".
Daniel Beck
Mais ce n'est pas expliqué en un seul endroit. Ce n'est expliqué nulle part. Pour un ensemble de pages de manuel qui est généralement assez bien écrit et édité, d'après mon expérience, c'est une omission surprenante.
JdeBP
1
Il h! C'est parce que vous connaissez déjà la réponse par magie et pouvez connecter le twain lors de la lecture du document, en remplissant ce qui n'est pas réellement écrit. Les personnes qui n'ont pas (y) notre connaissance préalable et qui lisent le manuel pour le découvrir doivent se demander pourquoi il n'y a aucune explication de ce qu'est un "modificateur" n'importe où. ☺
JdeBP
3

Vous devriez pouvoir utiliser

find . ! -mtime -60s
Karolos
la source
1
Nécessite des parenthèses pour moi:find . !( -mtime -60s )
Der Hochstapler
@OliverSalzburg: Sur mon Mac, cela fonctionne bien sans les parenthèses (Darwin Kernel Version 11.2.0).
Karolos
1

Dans les systèmes Unix -mtime était suivi d'un +/- suivi d'un nombre suivi d'unités de temps. [+ -] nn [dms]

Linux utilise mtime pour les jours, mmin pour les minutes, mais il ne semble pas y avoir d'option de secondes et n'utilise pas de spécificateur d'unités de temps. Le + ou - se réfère toujours à plus ou moins que le temps plutôt que d'être un argument d'option comme mentionné ci-dessus.

Vous pouvez utiliser -mmin 1, mais /unix/238738/find-files-newer-than-15-seconds-but-older-than-2-seconds explique comment gérer les secondes en général .

Nick Greenwood
la source