Geekflare est soutenu par son public. Nous pouvons percevoir des commissions d'affiliation sur les liens d'achat présents sur ce site.
En Développement Dernière mise à jour : 25 septembre 2023
Partager sur :
Invicti Web Application Security Scanner - la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

Nettoyer régulièrement le système de fichiers manuellement n'est pas une bonne chose. Automatisez-les !

La suppression manuelle de fichiers et de dossiers n'est pas une tâche passionnante, contrairement à ce que l'on pourrait croire. Il est donc logique de les automatiser.

Python est là pour nous faciliter la vie. Python est un excellent langage de programmation pour les scripts. Nous allons tirer parti de Python pour terminer notre tâche sans encombre. Tout d'abord, vous devez savoir pourquoi Python est un bon choix.

  • Python est le langage favori de tous les temps pour l'automatisation des tâches
  • Moins de code par rapport à d'autres langages de programmation
  • Python est compatible avec tous les systèmes d'exploitation. Vous pouvez exécuter le même code sous Windows, Linux et Mac.
  • Python possède un module appelé os qui nous aide à interagir avec le système d'exploitation. Nous allons utiliser ce module pour compléter notre automatisation de la suppression des fichiers.

Nous pouvons remplacer toutes les tâches système ennuyeuses ou répétitives à l'aide de Python. Écrire des scripts pour réaliser une tâche système spécifique est un jeu d'enfant si vous connaissez Python. Examinons le cas d'utilisation suivant.

Note : les exemples suivants ont été testés sur Python 3.6

Suppression de fichiers/dossiers datant de plus de X jours

Souvent, vous n'avez pas besoin de vieux journaux, et vous devez régulièrement les nettoyer pour libérer de l'espace de stockage. Il peut s'agir de n'importe quoi et pas seulement de journaux.

Nous avons une méthode appelée stat dans le module os qui donne des détails sur le dernier accès (st_atime), la dernière modification (st_mtime) et la dernière modification des métadonnées (st_ctime). Toutes les méthodes renvoient le temps en secondes depuis l'époque. Vous trouverez plus de détails sur l'époque ici.

Nous utiliserons une méthode appelée os.walk(path) pour parcourir les sous-dossiers d'un dossier.

Suivez les étapes ci-dessous pour écrire le code de suppression des fichiers/dossiers en fonction du nombre de jours.

  • Importez les modules temps, os, shutil
  • Attribuez le chemin et les jours aux variables
  • Convertissez le nombre de jours en secondes en utilisant la méthode time.time()
  • Vérifiez si le chemin existe ou non en utilisant le module os.path.exists(path)
  • Si le chemin existe, obtenez la liste des fichiers et des dossiers présents dans le chemin, y compris les sous-dossiers. Utilisez la méthode os.walk(path), qui vous renverra un générateur contenant les dossiers, les fichiers et les sous-dossiers
  • Obtenez le chemin du fichier ou du dossier en joignant le chemin actuel et le nom du fichier/dossier à l'aide de la méthode os.path.join()
  • Obtenez l'heure de début (ctime) ) à partir de la méthode os.stat(path) en utilisant l'attribut st_ctime
  • Comparez le ctime avec le temps que nous avons calculé précédemment
  • Si le résultat est supérieur aux jours souhaités par l'utilisateur, vérifiez s'il s'agit d'un fichier ou d'un dossier. S'il s'agit d'un fichier, utilisez la méthode os.remove(path) sinon utilisez la méthode shutil.rmtree()
  • Si le chemin n'existe pas, affichez le message "not found" (introuvable)

Voyons le code en détail.

# importation des modules nécessaires
import os
import shutil
import time

# fonction principale
def main() :

# initialisation du compte
deleted_folders_count = 0
deleted_files_count = 0

# spécification du chemin
path = "/PATH_TO_DELETE"

# spécification des jours
days = 30

# conversion des jours en secondes
# time.time() renvoie le temps actuel en secondes
seconds = time.time() - (days * 24 * 60 * 60)

# vérifier si le fichier est présent dans le chemin ou non
if os.path.exists(path) :
		
# itérer sur chaque dossier et fichier du chemin
for root_folder, folders, files in os.walk(path) :

# comparaison des jours
if seconds >= get_file_or_folder_age(root_folder) :

# suppression du dossier
remove_folder(root_folder)
deleted_folders_count = 1 # incrémentation du compte

# rupture après suppression du dossier_racine
break

else :

				# vérification du dossier à partir du dossier racine
for folder in folders :

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

# comparaison avec les jours
if seconds >= get_file_or_folder_age(folder_path) :

# invocation de la fonction remove_folder
remove_folder(folder_path)
deleted_folders_count = 1 # incrémentation du compte


# vérification des fichiers du répertoire actuel
for file in files :

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

# comparaison des jours
if seconds >= get_file_or_folder_age(file_path) :

# invocation de la fonction remove_file
remove_file(file_path)
deleted_files_count = 1 # incrémentation du compte

else :

# si le chemin n'est pas un répertoire
# comparaison avec les jours
if seconds >= get_file_or_folder_age(path) :

				# invocation du fichier
remove_file(path)
deleted_files_count = 1 # incrémentation du compte

else :

# le fichier/dossier n'est pas trouvé
print(f'"{path}" is not found')
deleted_files_count = 1 # incrémentation du compte

print(f "Total folders deleted : {deleted_folders_count}")
print(f "Total des fichiers supprimés : {deleted_files_count}")


def remove_folder(path) :

# supprimer le dossier
if not shutil.rmtree(path) :

# message de succès
print(f"{chemin} est supprimé avec succès")

else :

# message d'échec
print(f "Impossible de supprimer le {chemin}")



def remove_file(path) :

# suppression du fichier
if not os.remove(path) :

# message de succès
print(f"{path} is removed successfully")

else :

# message d'échec
print(f "Unable to delete the {path}")


def get_file_or_folder_age(path) :

# obtention de la durée du fichier/dossier
# la durée sera exprimée en secondes
ctime = os.stat(path).st_ctime

# renvoie le temps
return ctime


if __name__ == '__main__' :
main()

Vous devez ajuster les deux variables suivantes dans le code ci-dessus en fonction de vos besoins.

days = 30 
path = "/PATH_TO_DELETE"

Suppression des fichiers d'une taille supérieure à X Go

Recherchons les fichiers dont la taille est supérieure à un certain seuil et supprimons-les. Cette procédure est similaire au script précédent. Dans le script précédent, nous avons pris l'âge comme paramètre, et maintenant nous prendrons la taille comme paramètre pour la suppression.

# importation du module os
import os

# fonction qui renvoie la taille d'un fichier
def get_file_size(path) :

# obtention de la taille du fichier en octets
size = os.path.getsize(path)

# renvoi de la taille du fichier
return size


# fonction pour supprimer un fichier
def remove_file(path) :

# suppression du fichier
if not os.remove(path) :

# succès
print(f"{chemin} est supprimé avec succès")

else :

# erreur
print(f "Impossible de supprimer le {chemin}")


def main() :
# spécifier le chemin
path = "ENTER_PATH_HERE"

# indiquer la taille maximale du fichier en Mo
size = 500

# vérifier si le chemin existe ou non
if os.path.exists(path) :

# convertir la taille en octets
size = size * 1024 * 1024

# parcourir les sous-dossiers
for root_folder, folders, files in os.walk(path) :

# itération sur la liste des fichiers
for file in files :
				
# obtention du chemin du fichier
file_path = os.path.join(root_folder, file)

# vérification de la taille du fichier
if get_file_size(file_path) >= size :
# invocation de la fonction remove_file
remove_file(file_path)
			
else :

# vérification uniquement si le chemin est un fichier
if os.path.isfile(path) :
# path n'est pas un répertoire
# vérification du fichier directement
if get_file_size(path) >= size :
# invocation de la fonction remove_file
remove_file(path)


else :

# le chemin n'existe pas
print(f"{path} n'existe pas")

if __name__ == '__main__' :
main()

Ajustez les deux variables suivantes.

path = "ENTER_PATH_HERE" 
size = 500

Suppression de fichiers avec une extension spécifique

Il peut arriver que vous souhaitiez supprimer des fichiers en fonction de leur extension. Par exemple, un fichier .log. Vous pouvez trouver l'extension d'un fichier en utilisant la méthode os.path.splitext(path). Elle renvoie un tuple contenant le chemin et l'extension du fichier.

# import os module
import os

# main function
def main() :
    
   # spécifier le chemin
 path = "PATH_TO_LOOK_FOR"
    
 # spécifier l'extension
 extension = ".log"
    
 # vérifier si le chemin existe ou non
 if os.path.exists(path) :
        
       # vérifier si le chemin est un répertoire ou non
 if os.path.isdir(path) :
        
           # itération dans les sous-dossiers
 for root_folder, folders, files in os.walk(path) :
                
               # vérification des fichiers
 for file in files :

                   # chemin d'accès au fichier
 file_path = os.path.join(root_folder, file)

 # extraction de l'extension du nom de fichier
 file_extension = os.path.splitext(file_path)[1]

 # vérification de l'extension du fichier
 if extension == file_extension :
                        
                       # suppression du fichier
 if not os.remove(file_path) :
                            
                           # message de succès
 print(f"{file_path} deleted successfully")
                            
 else :
                            
                           # message d'échec
 print(f "Unable to delete the {file_path}")
        
 else :
            
           # le chemin n'est pas un répertoire
 print(f"{chemin} n'est pas un répertoire")
    
 else :
        
       # le chemin n'existe pas
 print(f"{chemin} n'existe pas")

if __name__ == '__main__' :
   # invocation de la fonction principale
 main()

N'oubliez pas de mettre à jour le chemin et la variable d'extension dans le code ci-dessus pour répondre à vos besoins.

Je vous suggère de tester les scripts dans un environnement NON PRODUCTIF. Une fois que vous êtes satisfait des résultats, vous pouvez programmer via cron (si vous utilisez Linux) l'exécution périodique des scripts pour les travaux de maintenance. Python est idéal pour réaliser ce genre de choses et si vous souhaitez apprendre à en faire plus, jetez un œil à ce cours Udemy.

  • Hafeezul Kareem Shaik
    Auteur
Merci à nos sponsors
D'autres lectures intéressantes sur le développement
Alimentez votre entreprise
Quelques outils et services pour aider votre entreprise à se développer.
  • Invicti utilise le Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, search engine crawler, et tout ce dont vous avez besoin pour collecter des données web.
    Essayez Brightdata
  • Monday.com est un système d'exploitation tout-en-un qui vous aide à gérer vos projets, vos tâches, votre travail, vos ventes, votre CRM, vos opérations, vos flux de travail et bien plus encore.
    Essayez le lundi
  • Intruder est un scanner de vulnérabilité en ligne qui détecte les faiblesses de votre infrastructure en matière de cybersécurité, afin d'éviter des violations de données coûteuses.
    Essayer l'intrus