Ik probeer alle gedateerde logboeken te verwijderen, behalve de meest recente. Voordat ik een script uitvoer om de bestanden te verwijderen, wil ik natuurlijk mijn commando’s testen om er zeker van te zijn dat ik nauwkeurige resultaten krijg.
Bij het uitvoeren van deze commando’s is de datum:
Sep 1 00:53:44 AST 2014
Directory-vermelding:
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
Ik dacht dat -mtime +1 alle bestanden van meer dan een dag oud moest weergeven. Waarom staat de 8-30.log er niet bij?
find . -type f -mtime +1 -name "testfile*log"
./testfile.2014-08-27.log
./testfile.2014-08-28.log
./testfile.2014-08-29.log
Dit is het gewenste effect, maar het was gewoon vallen en opstaan. Wat zegt deze 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
Antwoord 1, autoriteit 100%
De POSIX-specificatie voor findzegt:
-mtime
n
De primaire waarde wordt als waar beoordeeld als de wijzigingstijd van het bestand, afgetrokken van de initialisatietijd, gedeeld door 86400 (waarbij de rest wordt weggegooid),n
is.
Interessant is dat de beschrijving van find
de ‘initialisatietijd’ niet verder specificeert. Het is echter waarschijnlijk het moment waarop find
wordt geïnitialiseerd (uitgevoerd).
In de beschrijvingen, waar
n
als primair argument wordt gebruikt, wordt het geïnterpreteerd als een decimaal geheel getal, eventueel voorafgegaan door een plus ( ‘+’ ) of min -teken ( ‘-‘ ) teken, als volgt:
+n
Meer dann
.
n
Preciesn
.
-n
Minder dann
.
Op het gegeven tijdstip (2014-09-01 00:53:44 -4:00, waar ik afleid dat AST Atlantic Standard Time is, en daarom is de tijdzoneafwijking van UTC -4:00 in ISO 8601 maar +4:00 in ISO 9945 (POSIX), maar dat maakt niet zoveel uit):
1409547224 = 2014-09-01 00:53:44 -04:00
1409457540 = 2014-08-30 23:59:00 -04:00
dus:
1409547224 - 1409457540 = 89684
89684 / 86400 = 1
Zelfs als de ‘seconden sinds het tijdperk’-waarden verkeerd zijn, zijn de relatieve waarden correct (voor een bepaalde tijdzone ergens in de wereld zijn ze correct).
De n
waarde berekend voor het logbestand 2014-08-30 is daarom precies 1
(de berekening wordt gedaan met gehele rekenkunde) , en de +1
verwerpt het omdat het strikt een > 1
vergelijking (en niet >= 1
).
Antwoord 2, autoriteit 21%
+1 betekent 2 dagen geleden. Het is afgerond.
Antwoord 3, autoriteit 6%
Gebruik onderstaande om alle bestanden te vinden die in de afgelopen 24 uur zijn gewijzigd. De -1 hier betekent 1 dag of minder geleden gewijzigd.
find . -mtime -1 -ls