Ich weiß nicht, warum sftp das tut, aber Sie können nur rekursiv kopieren, wenn das Zielverzeichnis bereits existiert. Also mach das...
sftp> mkdir bin
sftp> put -r bin
BEHOBEN :Ich habe anfangs fälschlicherweise behauptet, dass OpenSSH put -r
nicht unterstützt . Es tut es, aber es tut es auf eine sehr seltsame Weise. Es scheint zu erwarten, dass das Zielverzeichnis bereits existiert, mit demselben Namen wie das Quellverzeichnis.
sftp> put -r source
Uploading source/ to /home/myself/source
Couldn't canonicalize: No such file or directory
etc.
sftp> mkdir source
sftp> put -r source
Uploading source/ to /home/myself/source
Entering source/
source/file1
source/file2
Besonders seltsam ist, dass dies auch dann gilt, wenn Sie dem Ziel einen anderen Namen geben:
sftp> put -r source dest
Uploading source/ to /home/myself/dest
Couldn't canonicalize: ...
sftp> mkdir dest
sftp> put -r source dest
Uploading source/ to /home/myself/dest/source
Couldn't canonicalize: ...
sftp> mkdir dest/source
sftp> put -r source dest
Uploading source/ to /home/myself/dest/source
Entering source/
source/file1
source/file2
Für ein besser implementiertes rekursives put
, könnten Sie PuTTY psftp
verwenden Befehlszeilentool stattdessen. Es ist in der putty-tools
Paket unter Debian (und höchstwahrscheinlich Ubuntu).
Alternativ wird Filezilla tun, was Sie wollen, wenn Sie eine GUI verwenden möchten.
Sie könnten an der Verwendung von rsync
interessiert sein stattdessen. Der Befehl dafür wäre
rsync --delete --rsh=ssh -av bin/ remote-ip-or-fqdn:/home/earlz/blah/bin/
Dadurch wird alles in bin/
kopiert und platzieren Sie es auf dem Remote-Server in /home/earlz/blah/bin/
. Als zusätzlichen Vorteil prüft es zuerst, ob sich die Datei auf der Remote-Seite nicht geändert hat, und wenn dies nicht der Fall ist, wird es sie nicht erneut senden. Zusätzlich können Sie eine -z-Option hinzufügen und es wird es für Sie komprimieren.