Encuentra todos los archivos anteriores a un minuto

8

¿Cómo puedo usar findpara seleccionar archivos que se han escrito y no modificado en el último minuto?

Sé que puedo hacerlo al revés, encontrar archivos modificados en los últimos 60 segundos -mtime -60s, pero quiero los que no se han modificado en los últimos 60 segundos.

Uso Linux y obtengo este error si uso segundos:

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

Respuestas:

13

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

El -justo antes de los dígitos no es un "guión de argumento" normal, sino que significa "menos que". +entonces es "más que".

De man find:

Todas las primarias que toman un argumento numérico permiten que el número sea precedido por un signo más (`` + '') o un signo menos (`` - ''). Un signo más precedente significa `` más que n '', un signo menos precedente significa `` menos que n '' y ninguno significa `` exactamente n ''.

Cabe señalar que para exactamente n , el tiempo se redondea. Entonces 1(1 día) no significa 86400 segundos.

Daniel Beck
fuente
2
Estrictamente hablando, +60no es lo contrario de -60, por la misma razón menor que no es lo contrario de mayor que : Ambos excluyen el valor exacto con el que se comparan. Pero su pregunta no indica qué comportamiento desea exactamente.
Daniel Beck
¡Esto no es exactamente lo mismo, desde entonces! revierte la "consulta" original. Pero de acuerdo, el OP no especifica lo que quiere.
Karolos
El día después, el OP declaró que está en Linux, no en Mac OS X. Si eso hubiera cambiado la respuesta, ¿puede actualizarlo?
Peter Mortensen
1
Sí, esto no funciona en Linux. Al menos RHEL 5.6. Sin embargo, la respuesta de SiegeX a continuación sí funciona.
MattPark
2
Esto no funciona en CentOS. Como se supone que funciona en Mac OS X
trante
14
find . -type f -mmin +1

Ejemplo

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

$ touch foo && find . -mmin +1
.
./three.txt
./four.txt
./two.txt
./one.txt
SiegeX
fuente
Ya no está etiquetado con osx.
Peter Mortensen el
4

El segundo -en -mtime -60ses no un delimitador opción.

-mtimees una opción, seguida de un argumento de opción . El argumento de la opción es -60s, y el contenido -es parte del argumento de la opción en sí, no un delimitador de la opción. Significa "menos de 60 segundos". Opción argumentos 60sy +60ssignifica "igual a 60 segundos" y "mayor de 60 segundos", respectivamente.

El manual de Apple MacOS y el manual de FreeBSD mencionan los prefijos +y -en exactamente un lugar, y se olvidan de explicar en cualquier lugar cuáles son. Esto es lo que son.

(El manual de información de GNU para GNU findtiene la misma omisión, curiosamente. Sin embargo, findla sintaxis de GNU por momentos es algo diferente a la findsintaxis de BSD y MacOS ).

Otras lecturas

JdeBP
fuente
1
Es incluso peor que simplemente explicarlo en un solo lugar : todas las demás opciones se refieren al atimeformato de hora, pero eso tampoco explica los prefijos . Es una sección separada a la que no se hace referencia.
Daniel Beck
En efecto; y encontrarás que yo escribí eso. Escribí "mencionar" y "olvide explicar en cualquier lugar". ☺
JdeBP
No quise contradecirlo, solo quería señalar que exactamente el único lugar es también el peor lugar posible desde un punto de vista de "vamos a hojear la página del manual".
Daniel Beck
Pero no se explica exactamente en un solo lugar. No se explica en ningún lugar en absoluto. Para un conjunto de páginas de manual que generalmente está escrito y editado bastante bien, en mi experiencia, es una omisión sorprendente.
JdeBP
1
Je! Esto se debe a que ya conoce mágicamente la respuesta y puede conectar a los dos al leer el documento, completando lo que en realidad no está escrito. Las personas que no tienen (y) nuestro conocimiento previo y están leyendo el manual para averiguarlo tienen que preguntarse por qué no hay una explicación de qué es un "modificador" en ningún lado. ☺
JdeBP
3

Deberías poder usar

find . ! -mtime -60s
Karolos
fuente
1
Requiere paréntesis para mí:find . !( -mtime -60s )
Der Hochstapler
@OliverSalzburg: en mi Mac, funciona bien sin el paréntesis (Darwin Kernel Versión 11.2.0).
Karolos
1

En los sistemas Unix, -mtime solía ir seguido de un +/- seguido de un número seguido de unidades de tiempo. [+ -] nn [dms]

Linux usa mtime por días, mmin por minutos, pero no parece haber una opción de segundos y no usa un especificador de unidades de tiempo. El + o - todavía se refiere a mayor o menor que el tiempo en lugar de ser un argumento de opción como se mencionó anteriormente.

Puede usar -mmin 1, pero /unix/238738/find-files-newer-than-15-seconds-but-older-than-2-seconds explica cómo manejar los segundos en general .

Nick Greenwood
fuente