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.