PDA

View Full Version : Sftp mehrere Dateien in Unterverzeichnis verschieben



rr2001
09-11-23, 17:34
Hallo Leute,
mittels expect-Script wird eine sftp-Verbindung zu einem Server hergestellt.
Mit „mget files*“ werden die Dateien von diesem Server heruntergeladen.
Kann ich mit einem Befehl alle heruntergeladenen files* auf dem Server in ein Unterverzeichnis verschieben?
Vielen Dank für eure Antworten.

Fuerchau
09-11-23, 22:41
sftp hat regulär keine Implementation des "mv" Commands, das Wildcards unterstützt.
Mittels ren[ame] kann man einzelne Dateien verschieben.
Da musst du dir nach dem mget eine Liste auf dem Client erstellen und ein Script generieren, dass dann jede Datei einzeln verschiebt.

Es gibt aber meistens noch die Möglichkeit mit "!HostCommand..." eine Befehl an die Hostshell zu übergeben um diesen dann dort auszuführen. Je nach Host (Linux/Windows) gibts dann ggf. unterschiedliche Befehle.
Windows: !move
Linux: !mv

rr2001
10-11-23, 05:53
hallo Fuerchau,
kann ich diese Liste, um die Dateien einzeln zu verarbeiten, innerhalb des expect-scripts erstellen und mittels Schleife verarbeiten?

Fuerchau
10-11-23, 09:13
In der Theorie ja:
https://www.thegeekstuff.com/2011/01/expect-expressions-loops-conditions/
Allerdings finde ich nichts näheres, die Liste der Dateinamen zu bekommen.
Allerdings, hast du das !-Kommando mal ausprobiert?
Damit wird ja der nachfolgende Befehl auf dem Ziel ausgeführt.

Andreas_Prouza
10-11-23, 15:09
Hierfür wäre es via SSH am einfachsten:

ssh host "cd wo/auch/immer; mv *.txt verzeichnis"

Fuerchau
10-11-23, 15:25
Lässt sich ssh denn auch via expect-Script scripten?

Andreas_Prouza
10-11-23, 15:46
Wenn man mit SSH-Keys arbeitet (und das sollte man immer tun) kann man das in ein Script einbauen.
So mache ich das schon öfter.

Mit dem SSH kann man sehr viel machen (scp, rsync, remote-cmds, usw.).
* Es ist sehr einfach
* Lässt sich sehr gut in Skripte einbinden
* Außerdem ist alles immer Verschlüsselt