Finden Sie Dateien, die neuer als 15 Sekunden, aber älter als 2 Sekunden sind

17

Ich möchte Dateien finden, die neuer als 15 Sekunden, aber älter als 2 Sekunden sind. Hier ist das Skript, das ich derzeit verwende und das Dateien größer als 15 Sekunden erfasst:

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

Jede Hilfe wird sehr geschätzt

Yllier123
quelle
2
Welches Betriebssystem verwenden Sie? Es gibt Unterschiede in den findImplementierungen.
terdon
Sollte eine Datei, die vor genau 2 Sekunden geändert wurde, übereinstimmen? Was ist mit einer Datei, die vor genau 15 Sekunden geändert wurde?
Mikel
Zum Zeitpunkt des Skriptstarts oder -endes neuer als 2 Sekunden?
Stéphane Chazelas
@Mikel, das ist wahrscheinlich irrelevant, da Uhren heutzutage eine Auflösung von Nanosekunden haben.
Stéphane Chazelas
1
Ok ... da niemand anderes fragt ... @ Yllier123 warum müssen Dateien gefunden werden, die zwischen 2 <x <15 Sek. Erstellt wurden? Ich bin nur Neugierig.
C Bauer

Antworten:

17

Sie können mehrere Prädikate kombinieren, indem Sie sie verketten.

Es gibt keine -oldermt, aber Sie können das als schreiben -not -newermt.

Sie wollen:

  • -newermt '-15 seconds' die Datei ist weniger als 15 Sekunden alt und
  • -not -newermt '-2 seconds' die datei ist mehr als 2 sekunden alt

Versuchen:

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

Oder um POSIX-konform zu sein:

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

Nur damit Sie (und andere Leser) wissen, bedeutet "neu" auch, dass Änderungen erst vor kurzem vorgenommen wurden und nicht erst vor kurzem vorgenommen wurden.

Mikel
quelle
3
Nett. Beachten Sie, dass -not -newermt '-2 seconds'auch Dateien abgeglichen werden, die genau 2 Sekunden alt sind. Verwenden Sie -not -newermt '3 seconds'diese Option, um diese ebenfalls auszuschließen.
terdon
1
Ja, die Edge Cases machen immer Spaß. Ich bin mir nicht sicher, welche Auflösung für diese Vergleiche verwendet wird. Ich gehe davon aus, dass alles, was vor ~ 2.000000001 Sekunden geändert wurde, eine Übereinstimmung ist, aber das hängt auch von Ihrem Dateisystem und Betriebssystem ab.
Mikel
Guter Punkt, ich habe keine Ahnung, wie hoch die Auflösung ist. Ich habe gerade getestet touch -d "2 seconds ago" file; find . -newermt '-15 seconds' -not -newermt '-2 seconds'und bekam file.
terdon
@terdon Nun, das hängt davon ab, ob die Zeitstempel eine Auflösung von mehr als einer Sekunde haben. , Das wird auf dem System ab, das Dateisystem und kann sogar zwischen Dateien auf dem gleichen Dateisystem ändern , wenn sie von mehreren verschiedenen Maschinen verwendet wird .
Blacklight Shining
"neuer" bedeutet "jünger als". Es ist das "m", was "modifiziert" bedeutet.
Hören Sie auf, Monica
4

Sie haben Ihr Betriebssystem nicht erwähnt ...

Dies funktioniert gut mit einer modernen Find-Implementierung wie der von FreeBSD oder mit sfind.

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

Sfind ist Teil der Schily-Tools: http://sourceforge.net/projects/schilytools/files/

WARNUNG: Ich habe gerade ein Problem in entdeckt sfind. Wenn die -mtimeArgumente kürzer als 60 Sekunden sind, funktioniert dies nicht ordnungsgemäß, da die Dateizeiten derzeit mit einem Zeitstempel von 60 Sekunden in der Zukunft verglichen werden, der ursprünglich für die Jahresumstellung für berechnet wurde -ls.

Übrigens: Gehört -notnicht dazu find, es ist ein nicht portierbarer GNUism.

schily
quelle
1
Da ist der bashTag… Die Umgebung könnte also Cygwin, Debian GNU / Hurd sein, bashdas unter FreeBSD oder Solaris läuft,… ;-)
phk
Für GNU findscheint es, dass Dezimalstellen, obwohl verrückt, als Workaround verwendet werden können.
Arthur2e5
POSIX find hat !für -not as! expression . Also keine große Sache.
@phk Aus diesem Grund habe ich die Methode erwähnt, die mit einem erweiterten Standard primaryvon arbeitet find, um die Benutzer darüber zu informieren, dass nicht immer neue hinzugefügt primarieswerden müssen, um die Funktionalität zu verbessern. Übrigens: Ein Fix libfindwurde im veröffentlicht schily tools.
Schily
@BinaryZebra Das Problem ist, dass gfindder -notAlias überhaupt hinzugefügt wurde . Es wurde nie gebraucht und seine Präsenz kann als eine Strategie des Anbieters angesehen werden.
Schily