it-swarm.com.de

Erklären des Befehls 'find -mtime'

Ich versuche, alle datierten Protokolle außer den neuesten zu entfernen. Bevor ich ein Skript zum Entfernen der Dateien ausführe, möchte ich natürlich meine Befehle testen, um sicherzustellen, dass genaue Ergebnisse angezeigt werden.

Bei der Ausführung dieser Befehle lautet das Datum:

Sep  1 00:53:44 AST 2014

Verzeichnisliste:

Aug 27 23:59 testfile.2014-08-27.log
Aug 28 23:59 testfile.2014-08-28.log
Aug 29 23:59 testfile.2014-08-29.log
Aug 30 23:59 testfile.2014-08-30.log
Aug 31 23:59 testfile.2014-08-31.log
Sep  1 00:29 testfile.log

Ich dachte, "Zeit +1" sollte alle Dateien auflisten, die älter als einen Tag sind. Warum wird das 8-30.log nicht aufgelistet?

find . -type f -mtime +1 -name "testfile*log"
./testfile.2014-08-27.log
./testfile.2014-08-28.log
./testfile.2014-08-29.log

Dies ist der gewünschte Effekt, aber es war nur Versuch und Irrtum. Was sagt diese 0?

find . -type f -mtime +0 -name "testfile*log"
./testfile.2014-08-30.log
./testfile.2014-08-27.log
./testfile.2014-08-28.log
./testfile.2014-08-29.log
19
user3299633

Die POSIX-Spezifikation für find sagt:

-mtimen Die Primärdatenbank wird als "true" ausgewertet, wenn die von der Initialisierungszeit subtrahierte Dateiänderungszeit, dividiert durch 86400 (wobei der Rest verworfen wird) n ist.

Interessanterweise spezifiziert die Beschreibung von find nicht weiter die 'Initialisierungszeit'. Es ist jedoch wahrscheinlich der Zeitpunkt, zu dem find initialisiert wird (run).

Wenn in den Beschreibungen n als Hauptargument verwendet wird, ist es als dezimale Ganzzahl zu interpretieren, der optional ein Pluszeichen ('+') oder ein Minuszeichen ('-') vorangestellt ist.

+n Mehr als n.
n Genau n.
-n Weniger als n

Zu der angegebenen Zeit (2014-09-01 00:53:44 -4: 00), bei der ich davon ausgehe, dass AST Atlantic Standard Time ist, und daher der Zeitzonenversatz von UTC -4: 00 in ist ISO 8601 aber +4: 00 in ISO 9945 (POSIX), aber das spielt keine Rolle)

1409547224 = 2014-09-01 00:53:44 -04:00
1409457540 = 2014-08-30 23:59:00 -04:00

so:

1409547224 - 1409457540 = 89684
89684 / 86400 = 1

Auch wenn die Sekunden seit der Epoche falsch sind, sind die relativen Werte korrekt (für einige Zeitzonen irgendwo auf der Welt sind sie korrekt).

Der für die Protokolldatei 2014-08-30 berechnete n -Wert ist daher genau 1 (die Berechnung wird mit Ganzzahlarithmetik durchgeführt), und der +1 lehnt ihn ab, da es sich ausschließlich um einen > 1-Vergleich handelt (und nicht um >= 1).

33

+1 bedeutet vor 2 Tagen. Es ist gerundet.

5
txt

Sie können den Befehl find mit mtime verwenden.

Zum Beispiel:

 find /path of the folder -type f -mtime +30

-type bezieht sich auf den Dateityp.

+30 bezieht sich auf das Datum vor dem aktuellen Datum.

Für weitere Optionen verweisen wir auf die Manpage .

0
Javeed Shakeel