Python: Supprimer tous les dossiers vides sur un serveur FTP

Voici un script Python qui permet, comme le titre l'indique, de parcourir toute l'arborescence d'un serveur FTP à la recherche des dossiers vides et de les supprimer.

Ce script a été testé avec Python 2.7, 3.4 et 3.5.

Détail du script:

La fonction principale qui permet de parcourir, récursivement, l'arborescence du serveur FTP.

def checkFtpEmptyFolders(ftp, dir):
    ctn = 0
    l = []
    ftp.dir(dir, l.append)
    l = [x.split() for x in l]
    """
        If the list is empty, the folder is empty.
        So, deletion of the folder.
    """
    if len(l) == 0:
        try:
            print("Delete folder %s" % dir)
            ftp.rmd(dir)
            ctn = 1
        except:
            pass
    
    else:
        """
            Browse the folder.
            If the item is a folder,
            then, recall the function
            with the subfolder in parameter.
        """
        for x in l:
            try:
                _dir = (dir + "/" + x[-1]).replace('//', '/')
                ftp.cwd(_dir)
                ftp.cwd(dir)
                ctn = ctn | checkFtpEmptyFolders(ftp, _dir)
            except:
                continue
    return ctn

Et enfin, la méthode pour appeler cette fonction.

from ftplib import FTP

host   = 'monFtp.monDomaine.fr'
user   = 'monUser'
passwd = 'monPass'
# Indiquer "/" pour débuter à la racine
dir    = '/monDossier'
# Cette variable permet de sortir de la boucle while
# s'il n'y a plus de dossier vide à supprimer
ctn    = 1

try:
    ftp = FTP(host)
    ftp.login(user, passwd)
    ftp.set_pasv(1)
    ftp.cwd(dir)
    while ctn:
        ctn = checkFtpEmptyFolders(ftp, dir)
    ftp.quit()
finally:
    try:
        ftp.close()
    except:
        pass

Et voilà, tous les dossiers vides, enfin supprimés.

Plusieurs adaptations peuvent être faites à partir de ce script.

Etiquettes: 

Ajouter un commentaire

Filtered HTML

  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Cette question permet de s'assurer que vous êtes un utilisateur humain et non un logiciel automatisé de pollupostage.
CAPTCHA visuel
Entrez les caractères (sans espace) affichés dans l'image.