Warum funktioniert sftp rmdir nicht?

18

Ich versuche ein Verzeichnis mit vielen Dateien und Ordnern von meinem privaten Server zu entfernen. Ich melde mich über SFTP an. Ich kann problemlos auf das gesamte Telefonbuch zugreifen; Ich kann sogar einzelne Dateien mit rm löschen. Aber das würde ewig dauern - also würde ich wirklich gerne rmdir für den höchsten Ordner ausführen, den ich entfernen möchte. Aber wenn ich das tue, bekomme ich

Verzeichnis konnte nicht entfernt werden: Fehler

Irgendwelche Gedanken darüber, was ich falsch machen könnte?

Vielen Dank, Sam

user1451632
quelle
Wenn Sie in diesen Server SFTP können, können Sie SSH? In diesem Fall können Sie eine leistungsfähigere Version des RM-Befehls verwenden: rm -rf foo / *
Chris

Antworten:

21

Nach meiner Erfahrung arbeitet rmdir lieber in einem leeren Verzeichnis. Wenn Sie versuchen, das Verzeichnis zu löschen foo, würde ich Folgendes tun:

$rm foo/*
$rmdir foo
Chris
quelle
2
Bearbeitet, weil das Flag -rf für rm in sftp nicht vorhanden ist.
Chris
1
Es lag auf der Hand, rm-rf zu tun. Ich habe rm -rf auf SFTP ausprobiert, aber es konnte -rf nicht akzeptieren, wie Sie betont haben. (Der Wildcard-Trick in SFTP hat auch nicht funktioniert.) Wie auch immer, vielen Dank für Ihre Hilfe!
user1451632
Das ist lustig. rm foo / * hat bei mir in SFTP gearbeitet. Wie auch immer, ich bin froh, dass du es gelöst hast!
Chris
Trotzdem werden Verzeichnisse nicht rekursiv entfernt. Es ist schon gut genug, aber noch nicht perfekt :-)
Krzysztof Jabłoński
Hatte das gleiche Problem und rm foo/*funktionierte nicht, weil foo/nicht leere Verzeichnisse enthielten. Zum Glück rsyncwar das auch erlaubt und ich habe lokal ein leeres Verzeichnis angelegt und dann rsync -rv --delete empty_local_dir/ host.example.org:/foo/alles unterhalb des entfernten foo/Verzeichnisses entfernt. Danach war es möglich, rmdir fooüber SFTP.
ckujau
5

Sie haben nicht angegeben, welchen SFTP-Client Sie verwenden. Ich gehe also von OpenSSH SFTP ( sftp) aus.

Der Befehl rmdirim OpenSSH-SFTP-Client wird direkt der SSH_FXP_RMDIRSFTP-Protokollanforderung zugeordnet. In der SFTP-Spezifikation für Version 3 (die von OpenSSH verwendet wird) wird ausdrücklich darauf hingewiesen, dass der SSH_FXP_RMDIRVorgang möglicherweise fehlschlägt, "wenn das angegebene Verzeichnis nicht leer ist" (obwohl dies anscheinend nicht vorgeschrieben ist).

Wenn das Verzeichnis keine Unterverzeichnisse enthält, können Sie mit rm foo/*(dh OpenSSH SFTP-Befehl, nicht Shell-Befehl) zuerst alle Dateien im Verzeichnis entfernen. Und dann benutze rmdir.

Martin Prikryl
quelle
1
Eine klassische Frage lautet: Wie geht man rm -r *mit SFTP um ? Ich denke nicht, dass es möglich ist.
Jari Turkia
2
@JariTurkia Mit sftp(OpenSSH-Befehlszeilenclient) ist dies nicht möglich . Es ist mit SFTP (Protokoll) möglich, wenn Sie einen ausreichend intelligenten Client haben.
Martin Prikryl
Ich würde mich über Vorschläge für einen ausreichend intelligenten SFTP-Client freuen. Es gibt eine bestimmte Box, die ich regelmäßig basteln muss und die aus Sicherheitsgründen auf SFTP beschränkt ist. Offensichtlich wird es sehr schmerzhaft, wenn man etwas tut, da OpenSSHs SFTP-Client nur wenige Befehle bietet.
Jari Turkia
Stellen Sie eine Frage zu Ihrem speziellen Problem ( "So löschen Sie einen Ordner rekursiv mit SFTP" ) - Stellen Sie sicher, dass Sie Ihre Plattform angeben.
Martin Prikryl