Warum dauert das Löschen eines Verzeichnisses auf SFTP so lange?

794
1.21 gigawatts

Eine meiner WordPress-Installationen wurde kürzlich migriert, und ich versuche, das alte Verzeichnis zu löschen, aber das Löschen dauerte über 15 Minuten. Es sieht so aus, als würde jede einzelne Datei gelöscht. Ist das normal? Kann man einfach einen Ordner löschen und im Hintergrund laufen lassen? Zum Vergleich dauert es unter Mac (Unix) eine halbe Sekunde.

0
`Kann es einfach einen Ordner löschen und im Hintergrund laufen lassen?` - Nein. Zoredache vor 8 Jahren 1
Das Löschen eines SFTP-Verzeichnisses ist eine sequentielle Reihe von rekursiven Befehlen, die von einem entfernten Standort aus über eine Verbindung mit Latenz ausgeführt werden. Dies ist eine der ineffizientesten Methoden, um Dateien zu löschen, die je erfunden wurden. Zeit zum Erlernen von Befehlszeilen-Dienstprogrammen und SSH-Terminalsitzungen. Fiasco Labs vor 8 Jahren 1

3 Antworten auf die Frage

2
JakeGould

Kann man einfach einen Ordner löschen und im Hintergrund laufen lassen? Zum Vergleich dauert es unter Mac (Unix) eine halbe Sekunde.

Dies ist nicht nur ein SFTP-Problem, sondern auch ein nichtlokales (auch als vernetztes) Dateisystemproblem. Wenn Sie sich auf Ihrem Mac oder einem anderen Betriebssystem befinden; direkt auf dem System - Sie haben direkten Zugriff auf Ihr Dateisystem. Und da das Dateisystem - aus Gründen der Klarheit - wirklich vereinfacht, ist es nur eine kleine Datenbank / ein Index mit Datei- / Verzeichnis-Positionszeigern. Wenn Sie also eine Datei oder ein Verzeichnis lokal löschen, wird die lokale Datenbank- / Indexdatei des Dateisystems relativ schnell bearbeitet, da sie natürlich lokal ist.

Im Gegensatz dazu haben Sie beim Remote-Zugriff auf ein Dateisystem über ein Netzwerkprotokoll wie SFTP keinen direkten Zugriff auf das Dateisystem. Wenn Sie also alle Dateien / Verzeichnisse über eine Netzwerkverbindung löschen müssen, muss die Netzwerkverbindung zunächst eine Liste der Dateien / Verzeichnisse vom Remote-Dateisystem abrufen. Wenn das Programm diese Liste erhält, führt es die entfernte Aktion aus, um eine Datei zu entfernen. Diese Methode ist wenig effizient und aus diesem Grund wird der direkte Zugriff auf das Dateisystem immer bevorzugt.

Wenn Sie jedoch über ein SFTP-Konto verfügen, sollten Sie auch über einen SSH-Zugriff verfügen, da eine SFTP-Verbindung normalerweise nur als SSH-Subsystem verwaltet wird. Wenn Sie also auf Dateien / Verzeichnisse warten, löschen Sie einfach, indem Sie sich über SSH anmelden und einen rm -rfBefehl für die betreffenden Dateien / Verzeichnisse ausführen .

1
user3201068

Das sichere Dateiübertragungsprotokoll bietet keinen direkten Zugriff auf die API des Betriebssystems.

Das bedeutet ziemlich nein.

Das Löschen über SSH ist möglicherweise schneller, wenn Sie über Shell-Zugriff verfügen.

1
jbrahy

Normalerweise haben Sie, wenn Sie über SFTP-Zugriff verfügen, auch SSH-Zugriff, und Sie können Remote-Befehle damit ausführen. Um eine Verzeichnisstruktur rekursiv zu entfernen, verwenden Sie den Parameter -r für den Befehl rm. dh

ssh user@hostname.com "rm -rf /home/user/directory" 

Seien Sie mit diesem Befehl sehr vorsichtig und stellen Sie sicher, dass das zu löschende Verzeichnis zu 100% das richtige ist. Sie können auch den Inhalt des Verzeichnisses auflisten, um sicherzugehen, dass Sie dies tun.

ssh user@hostname.com "ls /home/user/directory" 
Ich stimme im Allgemeinen mit dem überein, was Sie beschreiben und verstehe, wie die Ausführung von Remote-Befehlen funktioniert, aber es ist ehrlich gesagt sicherer, nur SSH in den Server einzulegen und * dann * den Befehl 'ls' oder 'rm -rf' von diesem Punkt aus auszuführen. JakeGould vor 8 Jahren 0