
Ich versuche, ein Backup-Skript zu erstellen, da die Protokolldateien immer größer werden. Ich kopiere die aktuelle Datei (z. B. secure
Datei in /var/log/
) und entferne den Inhalt aus dieser Datei. Aber es gibt einige Dateien mit Namen wie: secure.1
, secure.2
und all diese möchte ich zählen und wenn die Zahl größer ist, 2
sie alle archivieren. Ich kann die Methode zum Suchen oder Zählen dieser Dateien nicht finden. Das Erste, was mir einfiel, war:
find /var/log/ -name *.1 | wc -l
und dies wird immer gedruckt, 1
da es eine Datei gibt secure.1
. Wie kann ich zählen wie in einer For-Schleife, wo ich einen Zahlenbereich angeben kann, wie {1..5}
oder ähnlich. Gibt es eine Möglichkeit, diese Dateien zu trennen und zu einer einzigen zu machen und sie dann zu sichern oder zu löschen oder was auch immer ... oder vor allem, wie kann ich all diese Zahlen finden, die am Ende eine Nummer ergeben.
Antwort1
Mit einfachen -name
:
find /var/log -name '*.[2-9]'
oder für jede Ziffer:
find /var/log -name '*.[[:digit:]]'
oder wenn nach der Ziffer andere Zeichen möglich sind:
find /var/log -name '*.[2-9]*'
Antwort2
So finden Sie Dateinamen, die mit einer Zahl im Bereich von .
[1 bis 5] enden.
find /var/log/ -type f -regextype sed -regex ".*\.[1-5]$"
Antwort3
Warum nicht einfach...
for log in /var/log/*.[1-5]
do whatever to "$log"
done
find
Soweit ich weiß, brauchen Sie das nicht – die Shell verwendet dieselben Globs wie in -name
. Und wenn sich alle Dateien in einem einzigen Verzeichnis befinden … Natürlich find
könnte es von Vorteil sein, wenn es auch Unterverzeichnisse gibt, die Sie interessieren – das Durchforsten von Bäumen in der Shell kann Kopfschmerzen bereiten.