Ich habe ein Verzeichnis voller Protokolldateien, die ich mit einem POSIX-Shell-Skript auf einem eingebetteten System drehen muss. Sie heißen Datei, Datei.0, Datei.1 und so weiter. Ich habe diese Frage nicht schon gesehen und hatte Schwierigkeiten, sie bei Google zu finden.Drehen Sie eine Reihe von Protokolldateien namens Datei, Datei.0, Datei.1, etc. in Shell-Skript
1
A
Antwort
3
Ich endete diese Lösung selbst und dachte, ich sollte die Lösung hier posten. Wenn jemand Verbesserungsvorschläge hat, können Sie diese gerne hinzufügen.
# Usage: rotate_logs base [max]
# Example:
# rotate_logs messages 10 # Rotate "messages" files keeping only 10 rotated files.
rotate_logs() {
#set -x
local base="$1"
# ensure we have a base and it is not null
if [ $# -lt 1 -o -z "$1" ]; then
echo "Usage: $0 base [max]" >&2
echo "Example:" >&2
echo -e "\t$0 messages 10\t# Rotate \"messages\" files keeping only 10 rotated files." >&2
return 1
fi
# see if we were given a max number and make sure it is a number
if [ $# -ge 2 ]; then
if ! echo "$2" | egrep -q '^[0-9]+$'; then
echo "Maximum number, \"$2\", must be a number." >&2
return 1
fi
local max=$2
fi
local i
local n
# Get a list of all of the already rotated files in reverse
# base.3 base.2 base.1
for i in $(ls -1r "$base".*); do
# Calculate the next number for the current file, i.e. 4 for base.3
n=$((1 + $(echo $i | sed 's,'"$base"'.,,')))
# If the new file number is greater than max, delete it.
if [ $n -gt ${max:-999999} ]; then
rm -rf "$i"
else
# otherwise move the file to the new number
mv $i "$base".$n
fi
done
# If there is a "base" file with no extension move that now.
if [ -e "$base" ]; then
mv "$base" "$base".0
fi
}
Verwandte Themen
- 1. Datei in /etc/sudoers.d Datei wird nicht von sudo gelesen
- 2. Konnte eine Datei namens "pubspec.yaml" in
- 3. Powershell eine Ordnerstruktur in eine XML-Datei drehen
- 4. parket.io.ParquetDecodingException: Kann Wert 0 in Block -1 in Datei
- 5. Schreiben Sie Daten in eine JSON-Datei von PHP-Datei
- 6. Konnte Protokolldateien nicht erstellen Batch-Datei
- 7. Drehen Sie eine normale Datei nach einer bestimmten Größe wie eine Protokolldatei in Perl
- 8. Erstellen einer Datei in /etc/apt/sources.list.d/
- 9. Batch-Datei: Datei-Maske
- 10. ASN.1 codierte Datei
- 11. erstellen Sie eine AVI-Datei
- 12. Importieren Sie eine HTML-Datei in eine andere HTML-Datei
- 13. Kopieren Sie eine CSV-Datei in eine TXT-Datei
- 14. Struts 1, Eigenschaften Datei
- 15. So löschen Sie das Ende der Zeichenfolge im Shellskript der CSV-Datei?
- 16. PHP MySQL in Klasse 1 & 1 Datei
- 17. Postfix nicht gefunden/etc/postfix/virtual Datei
- 18. Genymotion: Bearbeiten/system/etc/hosts datei
- 19. Eine Zip-Datei in Zip-Datei lesen
- 20. wie drücken -1 in der Datei
- 21. Prevent eine Datei von
- 22. Können Sie eine Datei in Perforce "ignorieren"?
- 23. PowerShell - Datei verschieben, umbenennen und drehen
- 24. eine Text-Datei innerhalb einer SQL-Datei
- 25. Öffnen und Kopieren/Einfügen Variable namens Datei
- 26. Entfernen Sie eine Stückliste in einer Datei
- 27. Wie an eine Datei anhängen, dann kopieren Sie die Datei in eine andere Datei
- 28. MediaRecorder Ausgabe 0 Byte Datei
- 29. Java-Datei - Öffnen Sie eine Datei und schreiben Sie daran
- 30. Wählen Sie -first 1 für eine große Datei
Es sieht aus wie der Eingang zu dem for-Schleife, 'ls -1R„$ base“. *', Brechen könnte, wenn jemand eine Datei im Verzeichnis wie 'base.apple' setzen, wo das Suffix nicht a Nummer. – Harvey