No sé por qué sftp hace esto, pero solo puede realizar una copia recursiva si el directorio de destino ya existe. Así que haz esto...
sftp> mkdir bin
sftp> put -r bin
CORREGIDO :Inicialmente afirmé erróneamente que OpenSSH no era compatible con put -r
. Lo hace, pero lo hace de una manera muy extraña. Parece esperar que el directorio de destino ya exista, con el mismo nombre que el directorio de origen.
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
Lo que es especialmente extraño es que esto se aplica incluso si le das un nombre diferente al destino:
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
Para un put
recursivo mejor implementado , podrías usar el PuTTY psftp
herramienta de línea de comandos en su lugar. Está en el putty-tools
paquete bajo Debian (y muy probablemente Ubuntu).
Alternativamente, Filezilla hará lo que quieras, si quieres usar una GUI.
Puede que le interese usar rsync
en cambio. El comando para eso sería
rsync --delete --rsh=ssh -av bin/ remote-ip-or-fqdn:/home/earlz/blah/bin/
Esto copiará todo en bin/
y colóquelo en el servidor remoto en /home/earlz/blah/bin/
. Como beneficio adicional, primero verificará si el archivo en el lado remoto no ha cambiado y, si no es así, no lo volverá a enviar. Además, puede agregar una opción -z y lo comprimirá por usted.