Wir möchten alle Dateien löschen, die mit einer Nummer mit einer Ziffer oder mehr enden, z. B. mit zwei Ziffern oder drei Ziffern usw.
Hinweis: Wenn Dateien mit einer Nummer enden, bedeutet dies, dass diese Datei rotiert und tatsächlich mit einer eindeutigen Nummer gesichert wurde.
Beispiel
-rw-r--r-- 1 kafka hadoop 73668 Aug 5 07:56 controller.log.2018-08-05-07
-rw-r--r-- 1 kafka hadoop 73668 Aug 5 08:56 controller.log.2018-08-05-08
-rw-r--r-- 1 kafka hadoop 658893 Aug 7 11:53 controller.log.3
-rw-r--r-- 1 kafka hadoop 1092 Aug 7 14:35 controller.log.2
-rw-r--r-- 1 kafka hadoop 2750003 Aug 7 14:52 state-change.log.2018-08-07-14
-rw-r--r-- 1 kafka hadoop 3678 Aug 7 14:52 log-cleaner.log.2018-08-07-14
-rw-r--r-- 1 kafka hadoop 199094 Aug 7 14:52 controller.log.2018-08-07-14
-rw-r--r--. 1 kafka hadoop 24431 Aug 7 15:07 kafka.err
-rw-r--r-- 1 kafka hadoop 1147 Aug 7 16:02 server.log.10
-rw-r--r-- 1 kafka hadoop 1061 Aug 7 16:02 server.log.9
-rw-r--r-- 1 kafka hadoop 135465 Aug 7 16:07 server.log.8
-rw-r--r-- 1 kafka hadoop 10278 Aug 7 16:07 server.log.7
-rw-r--r-- 1 kafka hadoop 10350 Aug 7 16:07 server.log.6
-rw-r--r-- 1 kafka hadoop 10353 Aug 7 16:07 server.log.5
-rw-r--r-- 1 kafka hadoop 10322 Aug 7 16:07 server.log.4
-rw-r--r-- 1 kafka hadoop 1272 Aug 7 16:07 log-cleaner.log
-rw-r--r-- 1 kafka hadoop 473322 Aug 7 16:07 controller.log.1
-rw-r--r-- 1 kafka hadoop 170 Aug 7 16:07 controller.log
erwartete Ergebnisse:
-rw-r--r--. 1 kafka hadoop 24431 Aug 7 15:07 kafka.err
-rw-r--r-- 1 kafka hadoop 1272 Aug 7 16:07 log-cleaner.log
-rw-r--r-- 1 kafka hadoop 170 Aug 7 16:07 controller.log
Ich versuche diese Option, aber sie funktioniert nicht
find . -type f -mtime +6 -name '*[0-9]' -print -delete
bitte helfen Sie mir, die richtige Syntax zu erstellen,
Antwort1
Sie müssen den -regex
Parameter für verwenden find
.
find . -type f -mtime +6 -regex '^.*[0-9]$' -print -delete
Dadurch werden alle Dateien abgeglichen und gelöscht, die mit Zahlen enden (beachten Sie, dass einige Erweiterungen auch mit Zahlen enden können, z. B. .mp4
).
Beachten Sie auch, dass -mtime
keine Gleitkommazahlen unterstützt werden und immer auf den nächsten Tag aufgerundet wird. Wenn Sie also Dateien löschen möchten, die vor mindestens sechs Tagen geändert wurden, geben Sie ein -mtime +5
.
Antwort2
Bitte helfen Sie mir, die richtige Syntax zu erstellen.
Was Sie verwendet haben:
find . -type f -mtime +6 -name '*[0-9]' -print -delete
Istdie richtige Syntax, mit wenigen Einschränkungen:
-delete
ist nicht portierbar. Im Allgemeinenfind
können Implementierungen von es unterstützen oder nicht. Das portable Äquivalent ist-exec rm {} \;
.-name
verwendet glob-ähnliche Muster. Abhängig von Ihrem Gebietsschema[0-9]
kannoder nichtgenau das bedeuten, was Sie wollen: es kann ein Zeichen aus einem anderen Satz als nur ASCII-Dezimalziffern entsprechen (z. B. kann es entsprechen