Ich habe hier ein Verzeichnis, in dem zyklisch Backups angelegt werden. Hierbei handelt es sich um Ordner und Dateien, die jeweils in einem bestimmten Schema beginnen und mit dem aktuellen Datum benannt sind. Für die Ordner wäre das z.B. heute z.B. BCK0409_0525 und für die Dateien P09042013.prg. In diesem Ordner möchte ich nun von Zeit zu Zeit den Inhalt löschen, aber eine gewisse Anzahl an aktuellen Backups behalten. Ich habe das folgendermaßen gelöst:
Code: Alles auswählen
def clean_nfs(path_to_clean, units_to_skip):
"""
Loescht Ordner und Dateien in Verzeichnis "path_to_clean"
"""
## Schritt 1 - Scanne Verzeichnisse und Ordner und packe diese in eine Liste
files = []
folders = []
for name in os.listdir(path_to_clean):
try:
source = os.path.join(path_to_clean, name)
if os.path.isdir(source):
folders.append(name)
else:
files.append(name)
except os.error as error:
print (error)
## Schritt 2 - Sortiere Listen nach regelkonformen Anfangsbuchstaben und kuerze die letzen n raus
folders = [s for s in folders if s.startswith('BCK')]
files = [s for s in files if s.startswith('P')]
n = len(folders)
folders = folders[:n-units_to_skip]
n = len(files)
files = files[:n-units_to_skip]
## Schritt 3 - Loesche alle uebriggebliebenen Dateien und
print ('Raume NFS-Server auf: ' + path_to_clean)
for name in folders + files:
try:
source = os.path.join(path_to_clean, name)
if os.path.isdir(source):
shutil.rmtree(source)
else:
os.remove(source)
except (shutil.Error, os.error) as error:
print (error)