Suchen Sie nach Dateien, die mit der Nummer enden

10

Ich versuche, ein Backup-Skript zu erstellen, da die Protokolldateien immer größer werden. Was ich habe, ist das Kopieren der aktuellen Datei (zum Beispiel secureDatei in /var/log/) und das Entfernen des Inhalts aus dieser Datei. Aber es gibt einige Dateien mit dem Namen : secure.1, secure.2und all das zähle ich gerne, und wenn die Anzahl größer ist, dann 2archiviere ich sie alle. Ich kann die Methode zum Auffinden oder Zählen dieser Dateien nicht finden. Der erste Gedanke, der mir einfiel, war:

find /var/log/ -name *.1 | wc -l

und dies wird immer gedruckt, 1da es eine Datei gibt secure.1. Wie kann ich wie in for-Schleife zählen, wo ich einen Bereich von Zahlen wie {1..5}oder ähnlich angeben kann? Gibt es eine Möglichkeit, diese Dateien zu trennen und als eine zu erstellen und sie zu sichern oder zu löschen oder was auch immer ... oder zuallererst, wie kann ich all diese Nummern finden, die mit einer Nummer enden.

user3523605
quelle
1
Haben Sie vergessen, den Platzhalter zu zitieren? find /var/log/ -name '*.1' ...
Muru
1
Ich denke, Sie sollten logrotatenach Ihrem Zweck suchen.
Costas

Antworten:

15

Mit einfach -name:

find /var/log -name '*.[2-9]'

oder für eine beliebige Ziffer:

find /var/log -name '*.[[:digit:]]'

oder wenn andere Zeichen nach der Ziffer möglich sind:

find /var/log -name '*.[2-9]*'
jimmij
quelle
3

Die Dateinamen zu finden, die mit einer Zahl enden, reicht von .[1 bis 5].

find /var/log/ -type f -regextype sed -regex ".*\.[1-5]$"
Avinash Raj
quelle
1

Warum nicht einfach ...

for log in /var/log/*.[1-5]
do whatever to "$log"
done

Sie brauchen nicht, findsoweit ich das beurteilen kann - die Shell verwendet die gleichen Globs wie in -name. Und wenn sich alle Dateien in einem einzigen Verzeichnis befinden ... Wenn es natürlich auch Unterverzeichnisse gibt, an denen Sie interessiert sind, kann finddies von Vorteil sein - das Gehen von Bäumen in der Shell kann Kopfschmerzen verursachen.

mikeserv
quelle