Nevím, proč to sftp dělá, ale můžete pouze rekurzivně kopírovat, pokud cílový adresář již existuje. Tak udělejte toto...
sftp> mkdir bin
sftp> put -r bin
OPRAVENO :Původně jsem chybně tvrdil, že OpenSSH nepodporuje put -r
. Dělá to, ale dělá to velmi zvláštním způsobem. Zdá se, že očekává, že cílový adresář již existuje, se stejným názvem jako zdrojový adresář.
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
Zvláštní je, že to platí i v případě, že cíl pojmenujete jinak:
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
Pro lépe implementované rekurzivní put
, můžete použít PuTTY psftp
místo toho nástroj příkazového řádku. Je to v putty-tools
balíček pod Debianem (a pravděpodobně Ubuntu).
Alternativně Filezilla udělá, co chcete, pokud chcete použít GUI.
Mohlo by vás zajímat použití rsync
namísto. Příkaz k tomu by byl
rsync --delete --rsh=ssh -av bin/ remote-ip-or-fqdn:/home/earlz/blah/bin/
Tím se zkopíruje vše v bin/
a umístěte jej na vzdálený server v /home/earlz/blah/bin/
. Další výhodou je, že nejprve zkontroluje, zda se soubor na vzdálené straně nezměnil, a pokud ne, znovu jej nepošle. Navíc můžete přidat volbu -z a ta to za vás zkomprimuje.