So löschen Sie alle Dateien, die älter als X Tage sind und mit der/den Nummer/n enden

So löschen Sie alle Dateien, die älter als X Tage sind und mit der/den Nummer/n enden

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 -regexParameter 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 -mtimekeine 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:

  1. -deleteist nicht portierbar. Im Allgemeinen findkönnen Implementierungen von es unterstützen oder nicht. Das portable Äquivalent ist-exec rm {} \;.

  2. -nameverwendet 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

verwandte Informationen