Wenn man find
nicht hat -mmin
und wenn man auch mit einem feststeckt find
, der nur ganzzahlige Werte akzeptiert -mtime
, dann ist nicht unbedingt alles verloren, wenn man bedenkt, dass "älter als" ähnlich ist wie "nicht neuer als".
Wenn wir in der Lage waren, eine Datei zu erstellen, die eine Zeitspanne unserer Grenzzeit hat, können wir Sie bitten find
, die Dateien zu suchen, die "nicht neuer als" unsere Referenzdatei sind.
Das Erstellen einer Datei mit dem richtigen Zeitstempel ist etwas kompliziert, da ein System, das nicht über einen angemessenen verfügt, find
wahrscheinlich auch über einen weniger als fähigen date
Befehl verfügt, der beispielsweise Folgendes ausführen kann : date +%Y%m%d%H%M%S -d "6 hours ago"
.
Glücklicherweise andere alte Tools, die dies verwalten können, wenn auch auf unhandlichere Weise.
Bedenken Sie, dass sechs Stunden 21600 Sekunden sind. Wir möchten die Zeit vor sechs Stunden in einem nützlichen Format ermitteln:
$ date && perl -e '@d=localtime time()-21600; \
printf "%4d%02d%02d%02d%02d.%02d\n", $d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0]'
> Thu Apr 16 04:50:57 CDT 2020
202004152250.57
Die Perl-Anweisung hat zwar ein nützliches Datum hervorgebracht, muss aber besser genutzt werden:
$ date && touch -t `perl -e '@d=localtime time()-21600; \
printf "%4d%02d%02d%02d%02d.%02d\n", \
$d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0]'` ref_file && ls -l ref_file
Thu Apr 16 04:53:54 CDT 2020
-rw-rw-rw- 1 root sys 0 Apr 15 22:53 ref_file
Die Lösung für dieses alte UNIX lautet nun wie folgt:
$ find . -type f ! -newer ref_file -a ! -name ref_file -exec rm -f "{}" \;
Es könnte auch eine gute Idee sein, unsere Referenzdatei zu bereinigen ...
$ rm -f ref_file