Die regelmäßige manuelle Reinigung des Dateisystems ist nicht gut. Automatisieren Sie sie!
Das manuelle Löschen von Dateien und Ordnern ist keine aufregende Aufgabe, wie man vielleicht denkt. Es ist sinnvoll, sie zu automatisieren.
Hier kommt Python ins Spiel, um uns das Leben leichter zu machen. Python ist eine hervorragende Programmiersprache für die Skripterstellung. Wir werden die Vorteile von Python nutzen, um unsere Aufgabe ohne Hindernisse zu erledigen. Zunächst sollten Sie wissen, warum Python eine gute Wahl ist.
- Python ist eine sehr beliebte Sprache für die Automatisierung von Aufgaben
- Weniger Code im Vergleich zu anderen Programmiersprachen
- Python ist mit allen Betriebssystemen kompatibel. Sie können denselben Code unter Windows, Linux und Mac ausführen.
- Python verfügt über ein Modul namens
os
, das uns bei der Interaktion mit dem Betriebssystem hilft. Wir werden dieses Modul verwenden, um unsere Automatisierung des Löschens von Dateien zu vervollständigen.
Wir können alle lästigen oder sich wiederholenden Systemaufgaben mit Python ersetzen. Das Schreiben von Skripten zur Erledigung einer bestimmten Systemaufgabe ist ein Kinderspiel, wenn Sie Python beherrschen. Schauen wir uns den folgenden Anwendungsfall an.
Hinweis: Die folgenden Beispiele wurden mit Python 3.6 getestet
Entfernen von Dateien/Ordnern, die älter als X Tage sind
Oft brauchen Sie alte Protokolle nicht und müssen sie regelmäßig bereinigen, um Speicherplatz freizumachen. Dabei kann es sich um alles Mögliche handeln und nicht nur um Protokolle.
Wir haben eine Methode namens stat
im os-Modul
, die Details zum Zeitpunkt des letzten Zugriffs (st_atime), der letzte Änderung (st_mtime) und der letzten Änderung von Metadaten (st_ctime) liefert. Alle Methoden geben die Zeit in Sekunden seit der Epoche zurück. Weitere Einzelheiten über die Epoche finden Sie hier.
Wir werden eine Methode namens os.walk(path)
verwenden, um die Unterordner eines Ordners zu durchsuchen.
Führen Sie die folgenden Schritte aus, um Code für das Löschen von Dateien/Ordnern auf der Grundlage der Anzahl der Tage zu schreiben.
- Importieren Sie das Modul zeit, os, shutil
- Setzen Sie den Pfad und die Tage auf die Variablen
- Konvertieren Sie die Anzahl der Tage in Sekunden mit der Methode time.time()
- Prüfen Sie, ob der Pfad existiert oder nicht, indem Sie das Modul os.path.exists(Pfad) verwenden
- Wenn der Pfad existiert, ermitteln Sie die Liste der Dateien und Ordner, die in diesem Pfad enthalten sind, einschließlich der Unterordner. Verwenden Sie die Methode os.walk(path), die einen Generator mit Ordnern, Dateien und Unterordnern zurückgibt
- Ermitteln Sie den Pfad der Datei oder des Ordners, indem Sie sowohl den aktuellen Pfad als auch den Datei-/Ordnernamen mit der Methode os.path.join() verbinden
- Holen Sie sich die ctime aus der Methode os.stat(Pfad) mit dem Attribut st_ctime
- Vergleichen Sie die ctime mit der Zeit, die wir zuvor berechnet haben
- Wenn das Ergebnis größer ist als die gewünschten Tage des Benutzers, prüfen Sie, ob es sich um eine Datei oder einen Ordner handelt. Wenn es sich um eine Datei handelt, verwenden Sie die Methode os.remove(Pfad) , andernfalls verwenden Sie die Methode shutil.rmtree()
- Wenn der Pfad nicht existiert, drucken Sie die Meldung nicht gefunden
Schauen wir uns den Code im Detail an.
# Importieren der benötigten Module
import os
import shutil
import time
# Hauptfunktion
def main():
# Initialisierung der Zählung
deleted_folders_count = 0
deleted_files_count = 0
# Angabe des Pfades
path = "/PATH_TO_DELETE"
# Angabe der Tage
days = 30
# Umrechnung von Tagen in Sekunden
# time.time() gibt die aktuelle Zeit in Sekunden zurück
seconds = time.time() - (days * 24 * 60 * 60)
# Prüfen, ob die Datei im Pfad vorhanden ist oder nicht
if os.path.exists(path):
# Iterieren über jeden einzelnen Ordner und jede Datei im Pfad
for root_folder, folders, files in os.walk(path):
# Vergleichen der Tage
if seconds >= get_file_or_folder_age(root_folder):
# Entfernen des Ordners
remove_folder(root_folder)
deleted_folders_count = 1 # Erhöhen der Anzahl
# Abbrechen nach dem Entfernen des root_folders
break
else:
# Ordner aus dem Stammordner prüfen
for folder in folders:
# Ordnerpfad
folder_path = os.path.join(Stammordner, Ordner)
# Vergleich mit den Tagen
if seconds >= get_file_or_folder_age(folder_path):
# Aufruf der Funktion remove_folder
remove_folder(folder_path)
deleted_folders_count = 1 # Inkrementierung der Anzahl
# Überprüfung der aktuellen Verzeichnisdateien
for file in files:
# file path
file_path = os.path.join(root_folder, file)
# Vergleichen der Tage
if seconds >= get_file_or_folder_age(file_path):
# Aufrufen der Funktion remove_file
remove_file(file_path)
deleted_files_count = 1 # Erhöhen der Anzahl
else:
# wenn der Pfad kein Verzeichnis ist
# Vergleichen mit den Tagen
if seconds >= get_file_or_folder_age(path):
# Aufrufen der Datei
remove_file(path)
deleted_files_count = 1 # Erhöhen der Anzahl
else:
# Datei/Ordner wird nicht gefunden
print(f'"{path}" wird nicht gefunden')
deleted_files_count = 1 # Erhöhen der Anzahl
print(f "Total folders deleted: {gelöschte_Ordner_Anzahl}")
print(f "Insgesamt gelöschte Dateien: {gelöschte_Dateien_Anzahl}")
def remove_folder(path):
# Entfernen des Ordners
if not shutil.rmtree(path):
# Erfolgsmeldung
print(f"{path} wurde erfolgreich entfernt")
else:
# Fehlermeldung
print(f"{path} konnte nicht gelöscht werden")
def remove_file(path):
# Entfernen der Datei
if not os.remove(path):
# Erfolgsmeldung
print(f"{Pfad} wurde erfolgreich entfernt")
else:
# Fehlermeldung
print(f"{Pfad} konnte nicht gelöscht werden")
def get_file_or_folder_age(path):
# ctime der Datei/des Ordners ermitteln
# Zeit wird in Sekunden angegeben
ctime = os.stat(path).st_ctime
# liefert die Zeit
return ctime
if __name__ == '__main__':
main()
Sie müssen die folgenden beiden Variablen im obigen Code entsprechend den Anforderungen anpassen.
days = 30
path = "/PATH_TO_DELETE"
Entfernen von Dateien, die größer als X GB sind
Lassen Sie uns nach den Dateien suchen, die größer als eine bestimmte Größe sind, und diese löschen. Es ist ähnlich wie das obige Skript. Im vorigen Skript haben wir Alter als Parameter verwendet, und jetzt werden wir Größe als Parameter für das Löschen verwenden.
# Import des os-Moduls
import os
# Funktion, die die Größe einer Datei zurückgibt
def get_file_size(path):
# Ermittelt die Dateigröße in Bytes
size = os.path.getsize(path)
# Gibt die Größe der Datei zurück
return size
# Funktion zum Löschen einer Datei
def remove_file(path):
# Löschen der Datei
if not os.remove(path):
# Erfolg
print(f"{Pfad} wurde erfolgreich gelöscht")
else:
# Fehler
print(f"{Pfad} konnte nicht gelöscht werden")
def main():
# Pfad angeben
path = "ENTER_PATH_HERE"
# maximale Größe der Datei in MBs angeben
size = 500
# prüfen, ob der Pfad existiert oder nicht
if os.path.exists(path):
# Größe in Bytes umrechnen
size = size * 1024 * 1024
# durch die Unterordner gehen
for root_folder, folders, files in os.walk(path):
# Iterieren über die Dateiliste
for file in files:
# Ermitteln des Dateipfads
file_path = os.path.join(root_folder, file)
# Prüfen der Dateigröße
if get_file_size(file_path) >= size:
# Aufrufen der Funktion remove_file
remove_file(file_path)
else:
# Prüfen nur, ob der Pfad eine Datei ist
if os.path.isfile(path):
# path ist kein dir
# direkte Überprüfung der Datei
if get_file_size(path) >= size:
# Aufruf der Funktion remove_file
remove_file(path)
else:
# path existiert nicht
print(f"{path} existiert nicht")
if __name__ == '__main__':
main()
Passen Sie die folgenden beiden Variablen an.
path = "ENTER_PATH_HERE"
size = 500
Entfernen von Dateien mit einer bestimmten Erweiterung
Es könnte ein Szenario geben, in dem Sie Dateien nach ihrem Erweiterungstyp löschen möchten. Sagen wir .log-Datei
. Wir können die Erweiterung einer Datei mit der Methode os.path.splitext(path)
ermitteln. Sie gibt ein Tupel zurück, das den Pfad und die Erweiterung der Datei enthält.
# os importieren module
import os
# main function
def main():
# den Pfad angeben
path = "PATH_TO_LOOK_FOR"
# die Erweiterung angeben
extension = ".log"
# prüfen, ob der Pfad existiert oder nicht
if os.path.exists(path):
# prüfen, ob der Pfad ein Verzeichnis ist oder nicht
if os.path.isdir(path):
# Iterieren durch die Unterordner
for root_folder, folders, files in os.walk(path):
# Überprüfung der Dateien
for file in files:
# Dateipfad
file_path = os.path.join(root_folder, file)
# Extrahieren der Erweiterung aus dem Dateinamen
file_extension = os.path.splitext(file_path)[1]
# Prüfen der Dateierweiterung
if extension == file_extension:
# Löschen der Datei
if not os.remove(file_path):
# Erfolgsmeldung
print(f"{file_path} erfolgreich gelöscht")
else:
# Fehlermeldung
print(f "Die Datei {file_path} konnte nicht gelöscht werden")
else:
# Pfad ist kein Verzeichnis
print(f"{Pfad} ist kein Verzeichnis")
else:
# path doen't exist
print(f"{path} doesn't exist")
if __name__ == '__main__':
# Aufruf der Hauptfunktion
main()
Vergessen Sie nicht, die Pfad- und Erweiterungsvariable im obigen Code an Ihre Anforderungen anzupassen.
Ich empfehle Ihnen, die Skripte in einer NICHT-PRODUKTIONS-Umgebung zu testen. Sobald Sie mit den Ergebnissen zufrieden sind, können Sie sie über cron (wenn Sie Linux verwenden) regelmäßig für Wartungsarbeiten ausführen lassen. Python eignet sich hervorragend für diese Aufgaben. Wenn Sie mehr darüber lernen möchten, sollten Sie sich diese Udemy-Kurs ansehen.