Het ‘find -mtime’ commando uitleggen

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:

-mtimen
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), nis.

Interessant is dat de beschrijving van findde ‘initialisatietijd’ niet verder specificeert. Het is echter waarschijnlijk het moment waarop findwordt geïnitialiseerd (uitgevoerd).

In de beschrijvingen, waar nals 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 dan n.
  n
Precies n.
-n
Minder dan n.

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 nwaarde berekend voor het logbestand 2014-08-30 is daarom precies 1(de berekening wordt gedaan met gehele rekenkunde) , en de +1verwerpt het omdat het strikt een > 1vergelijking (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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes