Je ne sais pas pourquoi sftp fait cela, mais vous ne pouvez effectuer une copie récursive que si le répertoire de destination existe déjà. Alors fais ça...
sftp> mkdir bin
sftp> put -r bin
CORRIGÉ :J'ai d'abord affirmé à tort qu'OpenSSH ne supportait pas put -r
. C'est le cas, mais il le fait d'une manière très étrange. Il semble s'attendre à ce que le répertoire de destination existe déjà, avec le même nom que le répertoire source.
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
Ce qui est particulièrement étrange, c'est que cela s'applique même si vous donnez un nom différent à la destination :
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
Pour un put
récursif mieux implémenté , vous pouvez utiliser le PuTTY psftp
outil de ligne de commande à la place. C'est dans le putty-tools
package sous Debian (et très probablement Ubuntu).
Alternativement, Filezilla fera ce que vous voulez, si vous voulez utiliser une interface graphique.
Vous pourriez être intéressé par l'utilisation de rsync
Au lieu. La commande pour cela serait
rsync --delete --rsh=ssh -av bin/ remote-ip-or-fqdn:/home/earlz/blah/bin/
Cela copiera tout dans bin/
et placez-le sur le serveur distant en /home/earlz/blah/bin/
. Comme avantage supplémentaire, il vérifiera d'abord si le fichier du côté distant n'a pas changé, et si ce n'est pas le cas, il ne le renverra pas. De plus, vous pouvez ajouter une option -z et elle le compressera pour vous.