Encuentra archivos más nuevos que 15 segundos pero más viejos que 2

17

Quiero encontrar archivos más nuevos que 15 segundos pero más viejos que 2 segundos. Aquí está el script que estoy usando actualmente que toma archivos de más de 15 segundos:

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

Cualquier ayuda es muy apreciada

Yllier123
fuente
2
Qué sistema operativo estás usando? Hay diferencias en las findimplementaciones.
terdon
¿Debería coincidir un archivo modificado exactamente hace 2 segundos? ¿Qué pasa con un archivo modificado hace exactamente 15 segundos?
Mikel
¿Más reciente de 2 segundos en el momento en que comienza el script o en el momento en que termina?
Stéphane Chazelas
@Mikel, eso es probablemente irrelevante ya que los relojes tienen una resolución de nanosegundos hoy en día.
Stéphane Chazelas
1
Ok ... ya que nadie más pregunta ... @ Yllier123 ¿por qué necesita encontrar archivos creados entre 2 <x <15 segundos? Tengo curiosidad.
C Bauer

Respuestas:

17

Puede combinar múltiples predicados encadenándolos.

No hay -oldermt, pero puedes escribir eso como -not -newermt.

Usted quiere:

  • -newermt '-15 seconds' decir que el archivo tiene menos de 15 segundos de antigüedad y
  • -not -newermt '-2 seconds' decir que el archivo tiene más de 2 segundos de antigüedad

Tratar:

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

O, para cumplir con POSIX:

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

Además, para que usted (y otros lectores) sean conscientes, "más reciente" significa modificado más recientemente que, no creado más recientemente que.

Mikel
fuente
3
Agradable. Tenga en cuenta que -not -newermt '-2 seconds'también coincidirá con archivos de exactamente 2 segundos de antigüedad. Úselo -not -newermt '3 seconds'para excluirlos también.
terdon
1
Sí, los casos extremos siempre son divertidos. No estoy seguro de qué resolución utiliza para estas comparaciones. Mi suposición es que cualquier cosa que haya sido modificada hace ~ 2.000000001 segundos es una coincidencia, pero eso también dependería de su sistema de archivos y sistema operativo.
Mikel
Buen punto, no tengo idea de cuál es la resolución. Acabo de probar touch -d "2 seconds ago" file; find . -newermt '-15 seconds' -not -newermt '-2 seconds'y tengo file.
terdon
@terdon Bueno, eso depende de si las marcas de tiempo tienen una resolución más precisa que un segundo; eso dependerá del sistema, el sistema de archivos e incluso podría variar entre archivos en el mismo sistema de archivos si es utilizado por varias máquinas diferentes.
Blacklight Shining
"más nuevo" significa "más recientemente que". Es la "m" que significa "modificado".
OrangeDog
4

No mencionaste tu sistema operativo ...

Esto funciona bien con una implementación de búsqueda moderna como la de FreeBSD o con sfind.

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

Sfind es parte de las herramientas de Schily: http://sourceforge.net/projects/schilytools/files/

ADVERTENCIA: acabo de descubrir un problema en sfind. Si los -mtimeargumentos son inferiores a 60 segundos, no funcionará correctamente ya que los tiempos de archivo se comparan actualmente con una marca de tiempo de 60 segundos en el futuro que se calculó originalmente para el cambio de año -ls.

Por cierto: -notno pertenece find, es un GNUism no portátil.

astuto
fuente
1
Existe la bashetiqueta ... Entonces, el entorno podría ser Cygwin, Debian GNU / Hurd, bashejecutándose en FreeBSD o Solaris, ... ;-)
phk
Para GNU find, parece que los decimales, aunque locos, pueden usarse como una solución alternativa.
Arthur2e5
POSIX find tiene !para -no como! expression . Entonces, no es gran cosa.
@phk Esta es la razón por la que he mencionado método que funciona con un nivel mejorado primaryde findinformar a la gente que no hay necesidad de añadir siempre nueva primariespara encontrar a ser capaz de mejorar la funcionalidad. Por cierto: un fijo libfindha sido publicado en el schily tools.
schily
@BinaryZebra el problema es que gfindsí agregó el -notalias. Nunca fue necesario y su presencia puede verse como un bloqueo de proveedor en la estrategia.
schily