Gibt es andere Befehle wie scp, außer zum Löschen von Dateien und Ordnern?

13

Ich benutze scp, um Sachen an einen entfernten Ort zu kopieren. Aber manchmal funktioniert scp nicht wie erwartet. Ich habe festgestellt, dass die Kopie manchmal nicht ordnungsgemäß abgeschlossen wird (möglicherweise, wenn ich dem Ordner, den ich kopiere, neue Dateien hinzugefügt habe).

Ich möchte also zuerst den Remote-Ordner entfernen und dann die Kopie durchführen, um sicherzustellen, dass ich genau das habe, was ich brauche.

Gibt es andere Befehle wie scp (zB srm oder smv)? Oder gibt es eine Möglichkeit, entfernte Ordner und Dateien zu entfernen?

code_fodder
quelle

Antworten:

19

Mit dem sshBefehl können Sie so ziemlich jeden Befehl auf dem Remote-Host ausführen, z.

ssh yourlogin@remotehost rmdir somedir

somedirWobei in diesem Beispiel relativ zum Home-Verzeichnis Ihres Logins ist.

garyjohn
quelle
Dank dafür. Das einzige Problem, das ich bei der Methode habe, ist, dass Sie sich bei jedem Aufruf erneut "anmelden" müssen :(. Da mein Ziel eingebettet ist, kann ich keine ssh-Schlüssel verwenden, da alles überschrieben wird, also versuche ich es tun Sie dies in einem Befehl. Rsync sieht vielversprechend aus. Aber +1, da dies die Frage beantwortet :))
Code_fodder
5
@code_fodder Sie müssen sich ebenfalls mit rsync anmelden. Tatsächlich müssen Sie sich mit allen Methoden erneut anmelden . In der Tat, mit ssh kann man zumindest mehrere Befehle in einem Rutsch ausführen: ssh you@host bash -c "command1;command2;command3; commandN".
Terdon
@ terdon Dies ist ein guter Punkt und funktioniert danke schön :)
code_fodder
4

Rsync kopiert einen gesamten Pfad / Baum und überprüft Dateien, die sich bereits am Ziel befinden, und macht sich nicht die Mühe, sie zu kopieren, wenn sie unverändert sind. Wenn Sie die Option --delete verwenden, werden alle Dateien am Ziel gelöscht, die sich nicht mehr an der Quelle befinden. Es funktioniert über ssh

jerm
quelle
Ich habe mit rsync rumgespielt, als jemand dies in einem anderen Beitrag von mir in Bezug auf scp erwähnte. Ich habe rsync auf meinem lokalen PC installiert, aber nicht auf dem Remote-PC (einem eingebetteten Gerät). Ich habe den Befehl verwendet, rsync -avz -e shh root@location:/path/to/dest /path/from/hostaber er schlägt fehl, nachdem ich das Passwort eingegeben habe sh: rsync: not found. Bedeutet das, dass rsync auf dem Remote-PC vorhanden sein muss? Vielen Dank!
code_fodder
1
@code_fodder Ja, es muss ein Programm auf dem Remote-System ausgeführt werden, um ihm mitzuteilen, was zu tun ist. Es ist kein Straight-Copy-Programm
Kanadier Luke
@CanadianLuke ... damn :(
code_fodder
@code_fodder einfach installieren! Nützlicher als nicht
Kanadier Luke
Abhängig von der eingebetteten Lösung kann es sein, dass rsync mit einem gewissen Grad an Einfachheit verfügbar ist oder nicht ... obwohl es, wie ich bereits sagte, eine sehr häufige Untilität ist, abhängig von der eingebetteten Lösung. Hinweis: Rsync muss nicht ständig ausgeführt werden, muss jedoch vorhanden sein, damit es bei Bedarf ausgeführt werden kann.
jerm
3

Wenn Ihr Remote-SSH-Server das SFTP-Subsystem unterstützt (die meisten tun dies, sofern es nicht ausdrücklich deaktiviert wurde), können Sie mit der sftpShell (oder einem anderen SFTP-Client ) Dateien und Verzeichnisse auf dem Remote-Server bearbeiten.

Leider ist eine Sache, die die Basis- sftpShell anscheinend nicht erledigt , das rekursive Entfernen von Verzeichnissen. Um ein Verzeichnis zu löschen, müssen Sie zuerst den gesamten Inhalt löschen. Die meisten anderen Clients (insbesondere grafische) unterstützen dies jedoch normalerweise.

(Sie erwähnen nicht Ihr lokales Betriebssystem, aber wenn es sich um Linux handelt, können Sie Ihren nativen Dateimanager als GUI-SFTP-Client verwenden, indem Sie ihn auf eine URL wie sftp: // user @ host / path / verweisen . Bei Windows WinSCP ist ein anständiger Client, und FileZilla ist eine gute plattformübergreifende Lösung.)

Ilmari Karonen
quelle
1

Verwenden Sie rsync wie folgt, um ein Remote-Verzeichnis (/ local) zu leeren:

rsync -r --delete-excluded --exclude=* / server:/tmp/empty_this_dir/

Seien Sie vorsichtig - es wird alles entfernt, was unter dem angegebenen Ziel liegt!

Bruder
quelle
Ich habe es versucht, aber es gibt einen Fehler zurück und entfernt das entfernte Verzeichnis nicht. exec Anfrage fehlgeschlagen auf Kanal 0 rsync: Verbindung unerwartet geschlossen (0 Bytes empfangen bisher) [Sender] rsync Fehler: unerklärliche Fehler (Code 255) bei io.c (235) [sender = 3.1.2]
xarlymg89
Es scheint, als gäbe es ein Problem beim Starten von rsync auf der Remote-Seite oder beim Herstellen einer Verbindung über ssh. Sie können versuchen , ssh server rsync --versionoder ssh -v server rsync --versionden Grund zu finden.
Bro
Vielen Dank für Ihre Antwort, aber ich habe einen Weg gefunden, das Problem zu lösen, nicht so elegant, aber mit ähnlichen Ergebnissen. Ich werde es erneut versuchen, da ich glaube, dass ich mich erneut damit auseinandersetzen muss.
Xarlymg89
0

Alternativ können Sie das Remote-Verzeichnis in ein lokales rm -r /path_to_directory_to_removeVerzeichnis einhängen , es dann mit entfernen und schließlich das Verzeichnis umhängen.

Ursprüngliche Antwort hier: /programming//a/24650511/973919

xarlymg89
quelle