Geekflare wird von unserem Publikum unterstützt. Es kann sein, dass wir durch den Kauf von Links auf dieser Seite Affiliate-Provisionen verdienen.
Unter Entwicklung Zuletzt aktualisiert: September 24, 2023
Weitergeben:
Invicti Web Application Security Scanner - die einzige Lösung, die eine automatische Überprüfung von Schwachstellen mit Proof-Based Scanning™ ermöglicht.

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.

  • Hafeezul Kareem Shaik
    Autor
Dank an unsere Sponsoren
Weitere gute Lektüre zum Thema Entwicklung
Energie für Ihr Unternehmen
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti nutzt das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu überprüfen und innerhalb weniger Stunden verwertbare Ergebnisse zu erzielen.
    Versuchen Sie Invicti
  • Web Scraping, Residential Proxy, Proxy Manager, Web Unlocker, Search Engine Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie Brightdata
  • Monday.com ist ein All-in-One-Betriebssystem, mit dem Sie Projekte, Aufgaben, Arbeit, Vertrieb, CRM, Arbeitsabläufe und vieles mehr verwalten können.
    Versuch Montag
  • Intruder ist ein Online-Schwachstellen-Scanner, der Schwachstellen in Ihrer Infrastruktur aufspürt, um kostspielige Datenschutzverletzungen zu vermeiden.
    Versuchen Sie Intruder