IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

[FTP] Suppression d'un dossier


Sujet :

Réseau/Web Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut [FTP] Suppression d'un dossier
    Bonjour a tous,

    Je cherche actuellement a supprimer un dossier sur un serveur FTP, j'ai reussi a creer un algorithme fonctionnel en utilisant ftplib, mais etant donné que je manipule des dossiers contenant un grand nombre d'elements, le processus est plutot long.
    L'algorithme en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import ftplib
     
    def ftp_remove(path, ftp_link):
        try:
            ftp_link.cwd(path)
            for elt in ftp_link.nlst():
                if elt not in [".",".."]:
                    ftp_remove(elt, ftp_link)
            ftp_link.cwd("..")
            ftp_link.rmd(path)
        except ftplib.error_perm:
            ftp_link.delete(path)
     
    ftp_link = ftplib.FTP(server)
    ftp_link.login(user, passwd)
    ftp_remove("mon_dossier", ftp_link)
    ftp_link.quit()
    Si vous avez des idées pour améliorer ce dernier je suis preneur.

    Malheuresement, j'ai dans l'esprit que cette relative lenteur est liée au protocole FTP (filezilla ne fait pas mieux que mon algorithme en terme de temps).
    Existe il des solutions permettant de contourner le problème, càd de supprimer un dossier sans passer par du FTP ?
    J'avais pensé a creer un script, en Python ou PHP probablement, coté serveur, mais je n'ai ensuite aucune idée sur la manière dont il faudrait le lancer (en Python depuis un ordinateur client)...

    Merci d'avance pour vos conseils,

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Voyez si ces liens peuvent vous inspirer :

    http://www.sanitarium.co.za/delete-m...ories-via-ftp/

    http://serverfault.com/questions/221...ommand-on-bash

    https://www.google.fr/#q=ftp+remove+...ry+recursively

    NOTE : LFTP peut s'appeler via os.system("lftp -u <user> <pass> <host>") du module os, une fois LFTP installé sur votre bécane Linux, évidemment.

    https://docs.python.org/3.4/library/os.html#os.system

    http://fr.wikipedia.org/wiki/Lftp

    http://lftp.yar.ru/

    Au vu des commandes FTP standards : http://fr.wikipedia.org/wiki/Liste_des_commandes_ftp

    Je vois mal comment faire mieux que de passer par un algorithme récursif pour supprimer un répertoire non vide.

    @+.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    La librairie FTP de Python expédie des commandes au serveur FTP en proposant pour certaines une interface de type fonction. Par exemple, on peut écrire ftp.rmd(path) au lieu de ftp.sendcmd('RMD %s' % path).
    La possibilité de détruire un répertoire non vide peut être supportée par la serveur FTP par une commande style XRMD. Certains serveurs acceptent les wildcards pour DELEte.
    In fine, être "plus efficace" qu'expédier un DELE pour chaque fichier dépendra de ce que sait faire le serveur FTP ou de ses options de configuration. La suite de commandes "magiques" à expédier au serveur peut se tester via BASH et traduits ensuite en ".sendcmd", récupération du status,...
    A vous de voir ce que permet votre serveur FTP...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par N3mesis98 Voir le message
    Bonjour a tous,
    Existe il des solutions permettant de contourner le problème, càd de supprimer un dossier sans passer par du FTP ?
    J'avais pensé a creer un script, en Python ou PHP probablement, coté serveur, mais je n'ai ensuite aucune idée sur la manière dont il faudrait le lancer (en Python depuis un ordinateur client)...

    Merci d'avance pour vos conseils,
    Bonjour,

    Si vous avez la main côté serveur, vous pouvez toujours écrire un script Python/PHP qui récupère en URL params le nom du répertoire à supprimer récursivement + une clé cryptée d'identification du demandeur.

    Ensuite de quoi, il vous suffirait de lancer un os.system("rm -rf {}".format(dir_name)) si la config serveur l'autorise, ce qui aurait pour résultat une suppression propre et nette du répertoire ainsi que de l'ensemble de son contenu, mais -WOW!- bonjour la brèche de sécurité en faisant cela !

    Perso, je préfère perdre un peu de temps avec une procédure FTP qui lambine un peu...

    Après, c'est vous qui voyez.

    @+.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Merci bien pour vos reponses.

    A priori je vais devoir utiliser cette suppression dans un utilitaire qui ne sera pas uniquement a disposition sur linux, donc exit lftp...
    Visiblement, il vaut donc mieux passer par ces commandes FTP pour des questions de sécurité.
    Par contre j'ai reussi a tres legerement modifier la performance de l'algorithme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    import ftplib
     
    def ftp_remove(path, ftp_link):
    	print(path)
    	try:
    		ftp_link.delete(path)
    	except ftplib.error_perm:
    		ftp_link.cwd(path)
    		for elt in ftp_link.nlst():
    			if elt not in [".",".."]:
    				ftp_remove(elt, ftp_link)
    		ftp_link.cwd("..")
    		ftp_link.rmd(path)
     
    ftp_link = ftplib.FTP(server)
    ftp_link.login(user, passwd)
    ftp_remove("mon_dossier", ftp_link)
    ftp_link.quit()
    Etant donné qu'il y a "a priori" plus de fchiers que de dossiers contenus dans le dossier racine, on a un leger gain de temps.

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Si le problème est que c'est trop long au moment où on opére, alors il y a une autre solution toute bête: renommer le répertoire (genre "repertoire_aeffacer"), continuer à travailler et le supprimer plus tard quand on aura le temps (la nuit?).
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. [C# et FTP] Suppression de dossiers non vides
    Par Ikki_2504 dans le forum C#
    Réponses: 2
    Dernier message: 09/02/2011, 22h32
  2. [FTP] Suppression de dossier récursive
    Par blastafarie dans le forum Langage
    Réponses: 6
    Dernier message: 20/11/2007, 09h05
  3. Réponses: 4
    Dernier message: 24/09/2007, 00h44
  4. [FTP] suppression d'un dossier en recursif
    Par Joeleclems dans le forum Langage
    Réponses: 2
    Dernier message: 27/11/2006, 10h20
  5. [FTP] Suppression d'un dossier
    Par Belenos dans le forum Langage
    Réponses: 5
    Dernier message: 06/07/2006, 00h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo