2016-08-03 34 views
2

Also arbeite ich an einem Bash-Skript, um temporäre Dateien zu löschen und lief in unerklärliches Verhalten.find - mtime vs mmin - Seltsame Ergebnisse

# Find using mmin flag 
find /usr/local/store/file/temp/3_day/ -mmin +$((60*24*3)) -type f > /tmp/old_files_by_mmin.txt 

# Find using mtime flag 
find /usr/local/store/file/temp/3_day/ -mtime +3 -type f > /tmp/old_files_by_mtime.txt 

diff -u /tmp/old_files_by_mmin.txt /tmp/old_files_by_mtime.txt 

ersten Zeilen:

--- /tmp/old_files_by_mmin.txt 2016-08-03 16:56:42.535458820 +0000 
+++ /tmp/old_files_by_mtime.txt 2016-08-03 16:56:58.310681524 +0000 
@@ -117,59 +117,6 @@ 
/usr/local/store/file/temp/3_day/image/resize/2016/07/29/11/15/36/1296924350 
/usr/local/store/file/temp/3_day/image/resize/2016/07/29/11/47/52/1950191632 
/usr/local/store/file/temp/3_day/image/resize/2016/07/29/11/30/01/711250694 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/10/04/15/44313759 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/10/04/15/1589177813 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/10/04/15/1189074525 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/10/56/44/91382315 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/09/43/45/1622776054 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/44/57/1465920226 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/23/17/1467026748 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/15/58/1990201487 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/13/19/1990298215 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/35/59/518813467 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/12/10/53/1962045410 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/12/31/27/290517373 
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/12/05/08/547481306 

Warum ist die -mmin Flagdateien Aufnehmen, dass die mtime Flag nicht? Wenn beide Dateien älter als jetzt + 3 Tage finden sollen?

+1

Es könnte etwas mit Rundung Tagen zu tun haben. Warum 'Bash' übrigens? 'find' ist, soweit ich weiß, nicht eingebaut. – mustaccio

+0

@mustaccio: Ich vermute, Sie haben Recht. Ich bin mir nicht sicher, was Sie meinen, wenn Sie nicht "eingebaut" sind.Es ist ein Linux-System, so dass bash/find immer verfügbar ist. –

+1

@MikePurcell, "builtin" bedeutet "Teil der Shell", gegenüber einem externen Tool. Wenn es nicht Teil der Shell ist, müssen Sie das genaue Betriebssystem und die Version der Tools angeben, die von Ihrem Betriebssystem bereitgestellt werden. –

Antwort

1

die Unterscheidung zwischen Implementierungen gegeben, es lohnt sich auf what the POSIX standard for find Mandate suchen:

-mtime n

Der primäre gilt als wahr, wenn die Datei-Änderungszeit subtrahiert von der Initialisierung, geteilt auswerten von 86400 (mit einem Rest verworfen), ist n.


Ähnlich pro das Handbuch (für BSD find):

-mtime n[smhdw]

Wenn keine Einheiten angegeben werden, wertet diese primäre auf true, wenn die Differenz zwischen der Datei letzten Änderung Uhrzeit und Uhrzeit der Suche wurde gestartet, bis zum nächsten vollen 24-Stunden-Zeitraum aufgerundet, ist n 24-Stunden-Perioden.

... also: In BSD find, ist das Standardverhalten auf volle 24-Stunden-Perioden runden.


Für GNU finden, gibt es ein Maß an Konfigurierbarkeit; siehe -daystart:

-daystart

Measure Zeiten (für -amin, -atime, -cmin, -ctime, -mmin und -mtime) von Anfang an von heute statt ab 24 Stunden vor. Diese Option betrifft nur Tests, die später in der Befehlszeile angezeigt werden.

-atime n

Datei zuletzt zugegriffen vor n * 24 Stunden besetzt:

jedoch das Standardverhalten wie für -atime in der Definition angegeben. Wenn find herausfindet, wie viele 24-Stunden-Perioden die Datei zuletzt aufgerufen wurde, wird jeder Bruchteil ignoriert, so dass, um mit -atime +1 übereinzustimmen, auf eine Datei mindestens zwei Tage zuvor zugegriffen worden sein muss.