Geekflare wird von unserem Publikum unterstützt. Wir können Affiliate-Provisionen durch den Kauf von Links auf dieser Website verdienen.
Teilen:

Python-Skripte zum regelmäßigen Löschen der Dateien

Python-Framework
Invicti Web Application Security Scanner – die einzige Lösung, die eine automatische Verifizierung von Schwachstellen mit Proof-Based Scanning™ bietet.

Das regelmäßige manuelle Reinigen 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, um unser Leben leichter zu machen. Python ist eine ausgezeichnete Programmiersprache für Skripte. Wir werden Python nutzen, um unsere Aufgabe ohne Hindernisse zu erledigen. Zuerst sollten Sie wissen warum Python ist eine gute Wahl.

  • Python ist eine 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 hat ein Modul namens os Das hilft uns, mit dem Betriebssystem zu interagieren. Wir werden dieses Modul verwenden, um unsere Automatisierung des Löschens der Dateien abzuschließen.

Wir können alle lästigen oder sich wiederholenden Systemaufgaben mit Python ersetzen. Das Schreiben von Skripten zum Ausführen einer bestimmten Systemaufgabe ist ein Kinderspiel, wenn Sie Python kennen. Schauen wir uns den folgenden Anwendungsfall an.

Hinweis: Die folgenden Tests wurden unter Python 3.6+ getestet

Removing files/folders older than X days

Oft benötigen Sie keine alten Protokolle und müssen diese regelmäßig bereinigen, um Speicher verfügbar zu machen. Es könnte alles sein und nicht nur Protokolle.

Wir haben eine Methode namens stat der os Modul, das Details zum letzten Zugriff enthält (st_atime), Modifikation (st_mtime), und Metadatenänderung (st_ctime) Zeit. Alle Methoden geben die Zeit in Sekunden seit der Epoche zurück. Weitere Details zur Epoche finden Sie hier.

Wir werden eine Methode namens verwenden os.walk(path) zum Durchsuchen der Unterordner eines Ordners.

Führen Sie die folgenden Schritte aus, um Code für die Löschdateien / -ordner basierend auf der Anzahl der Tage zu schreiben.

  • Importieren Sie die Module Zeit, os, Shutil
  • Legen Sie den Pfad und die Tage für die Variablen fest
  • Konvertieren Sie die Anzahl der Tage in Sekunden mit Zeit Zeit() Methode
  • Überprüfen Sie, ob der Pfad vorhanden ist oder nicht os.path.exists (Pfad) Modul
  • Wenn der Pfad vorhanden ist, rufen Sie die Liste der im Pfad vorhandenen Dateien und Ordner ab, einschließlich der Unterordner. Verwenden Sie die Methode os.walk (Pfad), und es wird ein Generator zurückgegeben, der Ordner, Dateien und Unterordner enthält
  • Rufen Sie den Pfad der Datei oder des Ordners ab, indem Sie mit der Methode sowohl den aktuellen Pfad als auch den Datei- / Ordnernamen verbinden os.path.join ()
  • Bekommen das ctime von dem os.stat (Pfad) Methode unter Verwendung des Attributs st_ctime
  • Vergleich die ctime mit der Zeit, die wir zuvor berechnet haben
  • Wenn das Ergebnis größer als die gewünschten Tage des Benutzers ist, prüfen Sie, ob es sich um eine Datei oder einen Ordner handelt. Wenn es sich um eine Datei handelt, verwenden Sie die os.remove (Pfad) sonst benutze die shutil.rmtree () Methode
  • Wenn der Pfad nicht vorhanden ist, drucken Sie die Nachricht nicht gefunden

Sehen wir uns den Code im Detail an.

# importing the required modules
import os
import shutil
import time

# main function
def main():

	# initializing the count
	deleted_folders_count = 0
	deleted_files_count = 0

	# specify the path
	path = "/PATH_TO_DELETE"

	# specify the days
	days = 30

	# converting days to seconds
	# time.time() returns current time in seconds
	seconds = time.time() - (days * 24 * 60 * 60)

	# checking whether the file is present in path or not
	if os.path.exists(path):
		
		# iterating over each and every folder and file in the path
		for root_folder, folders, files in os.walk(path):

			# comparing the days
			if seconds >= get_file_or_folder_age(root_folder):

				# removing the folder
				remove_folder(root_folder)
				deleted_folders_count += 1 # incrementing count

				# breaking after removing the root_folder
				break

			else:

				# checking folder from the root_folder
				for folder in folders:

					# folder path
					folder_path = os.path.join(root_folder, folder)

					# comparing with the days
					if seconds >= get_file_or_folder_age(folder_path):

						# invoking the remove_folder function
						remove_folder(folder_path)
						deleted_folders_count += 1 # incrementing count


				# checking the current directory files
				for file in files:

					# file path
					file_path = os.path.join(root_folder, file)

					# comparing the days
					if seconds >= get_file_or_folder_age(file_path):

						# invoking the remove_file function
						remove_file(file_path)
						deleted_files_count += 1 # incrementing count

		else:

			# if the path is not a directory
			# comparing with the days
			if seconds >= get_file_or_folder_age(path):

				# invoking the file
				remove_file(path)
				deleted_files_count += 1 # incrementing count

	else:

		# file/folder is not found
		print(f'"{path}" is not found')
		deleted_files_count += 1 # incrementing count

	print(f"Total folders deleted: {deleted_folders_count}")
	print(f"Total files deleted: {deleted_files_count}")


def remove_folder(path):

	# removing the folder
	if not shutil.rmtree(path):

		# success message
		print(f"{path} is removed successfully")

	else:

		# failure message
		print(f"Unable to delete the {path}")



def remove_file(path):

	# removing the file
	if not os.remove(path):

		# success message
		print(f"{path} is removed successfully")

	else:

		# failure message
		print(f"Unable to delete the {path}")


def get_file_or_folder_age(path):

	# getting ctime of the file/folder
	# time will be in seconds
	ctime = os.stat(path).st_ctime

	# returning the time
	return ctime


if __name__ == '__main__':
	main()

Sie müssen die folgenden zwei Variablen im obigen Code basierend auf der Anforderung anpassen.

days = 30 
path = "/PATH_TO_DELETE"

Removing files larger than X GB

Lassen Sie uns nach Dateien suchen, die größer als eine bestimmte Größe sind, und sie löschen. Es ähnelt dem obigen Skript. Im vorherigen Skript haben wir genommen Alter als Parameter, und jetzt werden wir nehmen Größe als Parameter für das Löschen.

# importing the os module
import os

# function that returns size of a file
def get_file_size(path):

	# getting file size in bytes
	size = os.path.getsize(path)

	# returning the size of the file
	return size


# function to delete a file
def remove_file(path):

	# deleting the file
	if not os.remove(path):

		# success
		print(f"{path} is deleted successfully")

	else:

		# error
		print(f"Unable to delete the {path}")


def main():
	# specify the path
	path = "ENTER_PATH_HERE"

	# put max size of file in MBs
	size = 500

	# checking whether the path exists or not
	if os.path.exists(path):

		# converting size to bytes
		size = size * 1024 * 1024

		# traversing through the subfolders
		for root_folder, folders, files in os.walk(path):

			# iterating over the files list
			for file in files:
				
				# getting file path
				file_path = os.path.join(root_folder, file)

				# checking the file size
				if get_file_size(file_path) >= size:
					# invoking the remove_file function
					remove_file(file_path)
			
		else:

			# checking only if the path is file
			if os.path.isfile(path):
				# path is not a dir
				# checking the file directly
				if get_file_size(path) >= size:
					# invoking the remove_file function
					remove_file(path)


	else:

		# path doesn't exist
		print(f"{path} doesn't exist")

if __name__ == '__main__':
	main()

Passen Sie die folgenden zwei Variablen an.

path = "ENTER_PATH_HERE" 
size = 500

Removing files with a specific extension

Möglicherweise möchten Sie Dateien nach ihren Erweiterungstypen löschen. Sagen wir .log Datei. Wir können die Erweiterung einer Datei mit dem finden os.path.splitext(path) Methode. Es gibt ein Tupel zurück, das den Pfad und die Erweiterung der Datei enthält.

# importing os module
import os

# main function
def main():
    
    # specify the path
    path = "PATH_TO_LOOK_FOR"
    
    # specify the extension
    extension = ".log"
    
    # checking whether the path exist or not
    if os.path.exists(path):
        
        # check whether the path is directory or not
        if os.path.isdir(path):
        
            # iterating through the subfolders
            for root_folder, folders, files in os.walk(path):
                
                # checking of the files
                for file in files:

                    # file path
                    file_path = os.path.join(root_folder, file)

                    # extracting the extension from the filename
                    file_extension = os.path.splitext(file_path)[1]

                    # checking the file_extension
                    if extension == file_extension:
                        
                        # deleting the file
                        if not os.remove(file_path):
                            
                            # success message
                            print(f"{file_path} deleted successfully")
                            
                        else:
                            
                            # failure message
                            print(f"Unable to delete the {file_path}")
        
        else:
            
            # path is not a directory
            print(f"{path} is not a directory")
    
    else:
        
        # path doen't exist
        print(f"{path} doesn't exist")

if __name__ == '__main__':
    # invoking main function
    main()

Vergessen Sie nicht, den Pfad und die Erweiterungsvariable im obigen Code zu aktualisieren, um Ihren Anforderungen zu entsprechen.

Ich würde vorschlagen, die Skripte in der NON PRODUCTION-Umgebung zu testen. Sobald Sie mit den Ergebnissen zufrieden sind, können Sie einen Zeitplan erstellen cron (wenn Sie Linux verwenden), um es regelmäßig für Wartungsarbeiten auszuführen. Python ist großartig, um dieses Ziel zu erreichen. Wenn Sie mehr lernen möchten, lesen Sie dies Udemy natürlich.

Danke an unsere Sponsoren
Weitere großartige Lektüre zum Thema Entwicklung
Treiben Sie Ihr Geschäft an
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti verwendet das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu verifizieren und innerhalb weniger Stunden umsetzbare Ergebnisse zu generieren.
    Versuchen Sie es mit Invicti
  • Web-Scraping, Wohn-Proxy, Proxy-Manager, Web-Unlocker, Suchmaschinen-Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie es mit Brightdata
  • Semrush ist eine All-in-One-Lösung für digitales Marketing mit mehr als 50 Tools in den Bereichen SEO, Social Media und Content-Marketing.
    Versuchen Sie es mit Semrush
  • Intruder ist ein Online-Schwachstellenscanner, der Cyber-Sicherheitslücken in Ihrer Infrastruktur findet, um kostspielige Datenschutzverletzungen zu vermeiden.
    MIT DER INTELLIGENTEN SCHADENKALKULATION VON Intruder