
Ich muss Dateien innerhalb eines Datumsbereichs auf die Minute genau finden. Ich nehme an, dass es eines Tages von Vorteil sein könnte, zu wissen, wie man das auf die Sekunde genau macht. Wie auch immer. Ich habe gelernt, wie man -newermt und sogar -not -newermt verwendet; aber wenn ich sie kombiniere, bekomme ich anscheinend keine korrekten Ergebnisse. Ich habe Linux-Beispiele für die Verwendung von find gefunden, glaube aber nicht, dass die Schalter unter OSX funktionieren. Siehe die folgende Liste von Dateien:
#$ ls -l
total 32
-rw-r--r-- 1 testuser staff 1024 Oct 26 20:12 test1.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 19:00 test1_old.swc
-rw-r--r-- 1 testuser staff 1024 Oct 26 20:12 test2.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 19:00 test2_old.swc
-rw-r--r-- 1 testuser staff 1024 Oct 26 20:12 test3.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 19:00 test3_old.swc
-rw-r--r-- 1 testuser staff 1024 Oct 26 20:12 test4.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 19:00 test4_old.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 20:11 test5.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 20:13 test6.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 19:00 timestamp.tmp
Ich würde erwarten, dass der folgende Befehl test1.swc bis test4.swc zurückgibt. Beachten Sie jedoch, dass er test6.swc zurückgegeben hat:
#$ find . -newermt '2010-10-26 20:11' -a -not -newermt '2010-10-26 20:13'
./test1.swc
./test2.swc
./test3.swc
./test4.swc
./test6.swc
Ich dachte, die Minute für die Bedingung „-not“ wäre falsch, also habe ich Folgendes versucht, aber es hat nichts zurückgegeben:
#$ find . -newermt '2010-10-26 20:11' -a -not -newermt '2010-10-26 20:12'
#$
Ich bin zu dem Schluss gekommen, dass ich die Schalter -newermt und -not -newermt nicht richtig kombiniere. Gibt es einen Rat, wie ich das korrigieren kann?
Antwort1
Ihre Syntax sieht korrekt aus. Wie haben Sie diese Dateien erstellt? Ich habe die falsche Rückgabe gesehen, als ich nur Touch zum Aktualisieren des Datums verwendet habe.
In BSD ist -a nicht erforderlich und ich neige dazu, ! statt -not zu verwenden (persönliche Präferenz).
Wenn Sie nach Befehlshilfe suchen, denken Sie daran, dass Sie BSD durchsuchen möchten, da es einige Unterschiede gibt, die ich verwendeFreeBSD-Manpages
Denken Sie daran, dass die Datei mehr als nur Minuten enthält. Wenn Sie also die erste Sekunde möchten, müssen Sie diese markieren. Ich habe eine Struktur wie Ihre eingerichtet und als ich :00 für die Sekunden hinzugefügt habe, konnte ich dieselben Ergebnisse erhalten wie Sie, bei denen es keinen Sinn ergab. Also habe ich ein ls -lT ausgeführt und konnte die Sekunden in der Datei sehen. Dann habe ich den Befehl find ausgeführt und meine erwarteten Ergebnisse erhalten. Es sieht so aus, als ob das ! oder -not die Sekunden standardmäßig auf 59 setzt, sodass die gesamte Minute enthalten ist.
#$ finden . -newermt "2010-10-26 20:11:00" ! -newermt "2010-10-26 20:13:00"