Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

effacer un répertoire récursivement avec Perl et Net::FTP

5 réponses
Avatar
Tribulations Parallèles
Bonjour à tous,

J'essaie d'effacer un répertoire récursivement avec Net::FTP sur le serveur
FTP Free.

$ftp->rmdir("directory", 1)

Cela ne marche pas. J'obtiens un message du style il a atteint son niveau
maximum de récursivité:

"Deep recursion on subroutine...etc."

Or, mon répertoire "directory" sur le serveur free est tout ce qu'il y a de
plus normal.
J'ai regardé dans le code de rmdir, on y trouve:

# Get a list of all the files in the directory
my @filelist = grep { !/^\.{1,2}$/ } $ftp->ls($dir);

J'ai fait un print @filelist, c'est un truc monstreusement grand qui
apparemment est composé de manière récursive. Extrait:

[...]x_files/././././././././././..index_files/././././././././././img1index_files/././././././[...]

Enfin avant de chercher plus loin, j'aimerais savoir si vous obtenez le même
comportement en essayant d'effacer un répertoire non vide sur free ou
autre. Pour ceux qui ne savent pas comment utiliser le module (pas
compliqué...), je peux mettre un bout de code.
Mais je ne vois pas trop d'où peut venir l'erreur dans mon programme, je
fais un rmdir d'un répertoire tout bête qui existe. Pas d'histoire de lien
symbolique... Si ça peut jouer, je suis en mode de transfert binaire (a
priori non, mais je le dis quand même).

Merci d'avance,

Julien
--
"Allez, Monsieur, allez, et la foi vous viendra." (D'Alembert).

5 réponses

Avatar
Tribulations Parallèles
Tribulations Parallèles wrote:

J'ai regardé dans le code de rmdir, on y trouve:


Au fait, le code en question se trouver à /usr/lib/perl5/5.8.6/Net/FTP.pm.
En effet, ma version de Perl avec perl -v:
This is perl, v5.8.6 built for i386-linux

Julien
--
"Allez, Monsieur, allez, et la foi vous viendra." (D'Alembert).

Avatar
Alexandre Jaquet
Tribulations Parallèles wrote:


J'ai regardé dans le code de rmdir, on y trouve:



Au fait, le code en question se trouver à /usr/lib/perl5/5.8.6/Net/FTP.pm.
En effet, ma version de Perl avec perl -v:
This is perl, v5.8.6 built for i386-linux

Julien


Peut être un problème de droit ...

Alexandre Jaquet


Avatar
Tribulations Parallèles
Alexandre Jaquet wrote:

Peut être un problème de droit ...


C'est pas ça (j'ai fait un chmod 777 sur le répertoire).
Je me remets à chercher dès que j'ai un peu de temps.

Julien
--
"Allez, Monsieur, allez, et la foi vous viendra." (D'Alembert).

Avatar
Alexandre Jaquet
Alexandre Jaquet wrote:


Peut être un problème de droit ...



C'est pas ça (j'ai fait un chmod 777 sur le répertoire).
Je me remets à chercher dès que j'ai un peu de temps.

Julien


Dans le sens ou free n'autorise pas la suppression complète du
repertoire. Tu as testé ton script sur un autre serveur ?

Alexandre Jaquet


Avatar
Tribulations Parallèles
Alexandre Jaquet wrote:

Dans le sens ou free n'autorise pas la suppression complète du
repertoire. Tu as testé ton script sur un autre serveur ?


Merci pour ta réponse.
Je viens d'essayer sur le serveur ftp de la poste. Effectivement, je
n'obtiens pas l'erreur précédente, qui je le rappelle, était:

Deep recursion on subroutine "Net::FTP::rmdir"
at /usr/lib/perl5/5.8.6/Net/FTP.pm line 612.

Ça marche parfaitement, en faisant:
$ftp->rmdir("directory", "1")

<interlude>
et bizarrement, pas $ftp->rmdir("directory", 1), qui me donne un
comportement bizarre, pourtant dans la page man je trouve:
rmdir ( DIR [, RECURSE ])
Remove the directory with the name "DIR". If "RECURSE" is true
then
"rmdir" will attempt to delete everything inside the directory.

Or j'avais compris que 1 ne pouvait être converti en autre chose que quelque
chose de true en Perl... De toute façon, les erreurs obtenues en faisant 1
sans guillemets étaient insensées (du style:
"Cannot remove directory recursively coucou: Directory not empty").
</interlude>

En revanche, en faisant exactement la même chose sur Free, ça plante,
j'obtiens toujours le même message d'erreur "Deep recursion".
Dans le code de rmdir, il y a:

my @filelist = grep { !/^.{1,2}$/ } $ftp->ls($dir);

Visiblement, c'est le ls qui pose problème, il renvoie n'importe quoi (cette
liste très longue mise dans mon post initial).
Je vais envoyer un mail à Free pour voir.

Julien
--
"Allez, Monsieur, allez, et la foi vous viendra." (D'Alembert).