pourquoi sftp rmdir ne fonctionne pas?

18

J'essaie de supprimer un répertoire contenant de nombreux fichiers et dossiers de mon espace serveur privé. Je me connecte via SFTP très bien; Je peux accéder à l'ensemble du répertoire sans problème; Je peux même supprimer des fichiers individuels avec rm. Mais cela me prendrait une éternité - je voudrais donc vraiment faire rmdir sur le dossier le plus élevé que je veux supprimer. Mais quand je fais ça, je reçois

Impossible de supprimer le répertoire: échec

Avez-vous des idées sur ce que je pourrais faire de mal?

Merci beaucoup, Sam

user1451632
la source
Si vous pouvez SFTP sur ce serveur, pouvez-vous SSH? Si c'est le cas, vous pouvez utiliser une version plus puissante de la commande RM: rm -rf foo / *
Chris

Réponses:

21

D'après mon expérience, rmdir préfère travailler sur un répertoire vide. Si vous essayez de supprimer le répertoire foo, je ferais:

$rm foo/*
$rmdir foo
Chris
la source
2
Modifié car l'indicateur -rf n'existe pas pour rm dans sftp.
Chris
1
SSH à faire rm -rf était la réponse évidente. J'ai essayé rm -rf sur SFTP mais il ne pouvait pas accepter -rf, comme vous l'avez souligné. (L'astuce générique dans SFTP n'a pas fonctionné non plus.) Quoi qu'il en soit, merci beaucoup pour votre aide!
user1451632
Ca c'est drôle. rm foo / * a travaillé pour moi dans SFTP. Quoi qu'il en soit, je suis content que vous l'ayez résolu!
Chris
Pourtant, il ne supprime pas les répertoires de manière récursive. C'est déjà assez bon, mais pas encore parfait :-)
Krzysztof Jabłoński
A eu le même problème et rm foo/*ne fonctionnait pas car foo/contenait des répertoires non vides. Heureusement, cela a également rsyncété autorisé et j'ai créé un répertoire vide localement , puis utilisé rsync -rv --delete empty_local_dir/ host.example.org:/foo/pour supprimer tout ce qui se trouve sous le foo/répertoire distant . Ensuite, il a été possible de rmdir foovia SFTP.
ckujau
5

Vous n'avez pas spécifié quel client SFTP vous utilisez. Je suppose donc OpenSSH SFTP ( sftp).

La commande rmdirdu client OpenSSH SFTP correspond directement à la SSH_FXP_RMDIRdemande de protocole SFTP. La spécification SFTP pour la version 3 (celle utilisée par OpenSSH) mentionne spécifiquement que l' SSH_FXP_RMDIRopération peut échouer, "si le répertoire spécifié n'est pas vide" (bien qu'il ne semble pas le rendre obligatoire).

Si le répertoire n'a pas de sous-répertoires, vous pouvez utiliser rm foo/*(c'est-à-dire la commande OpenSSH SFTP, pas la commande shell) pour supprimer d'abord tous les fichiers du répertoire. Et puis utilisez rmdir.

Martin Prikryl
la source
1
Une question classique est: Comment faites-vous rm -r *avec SFTP. Je ne pense pas que ce soit possible.
Jari Turkia
2
@JariTurkia Ce n'est pas possible avec sftp(client de ligne de commande OpenSSH). C'est possible avec SFTP (protocole), si vous avez un client suffisamment intelligent.
Martin Prikryl
J'apprécierais toute suggestion pour un client SFTP suffisamment intelligent. Il y a une boîte particulière, que je dois bricoler régulièrement et qui est limitée au SFTP pour des raisons de sécurité. De toute évidence, lorsque vous faites quoi que ce soit, cela devient très douloureux, étant donné le nombre limité de commandes proposées par le client SFTP d'OpenSSH.
Jari Turkia
Posez une question sur votre problème spécifique ( "Comment supprimer récursivement un dossier à l'aide de SFTP" ) - Assurez-vous de spécifier votre plate-forme.
Martin Prikryl