Non so perché sftp lo faccia, ma puoi solo copiare in modo ricorsivo se la directory di destinazione esiste già. Quindi fallo...
sftp> mkdir bin
sftp> put -r bin
CORRETTO :Inizialmente ho affermato erroneamente che OpenSSH non supportava put -r
. Lo fa, ma lo fa in un modo molto strano. Sembra aspettarsi che la directory di destinazione esista già, con lo stesso nome della directory di origine.
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
Ciò che è particolarmente strano è che questo si applica anche se si assegna un nome diverso alla destinazione:
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
Per un put
ricorsivo meglio implementato , potresti usare PuTTY psftp
invece lo strumento da riga di comando. È nel putty-tools
pacchetto sotto Debian (e molto probabilmente Ubuntu).
In alternativa, Filezilla farà quello che vuoi, se vuoi usare una GUI.
Potresti essere interessato a usare rsync
invece. Il comando per questo sarebbe
rsync --delete --rsh=ssh -av bin/ remote-ip-or-fqdn:/home/earlz/blah/bin/
Questo copierà tutto in bin/
e posizionalo sul server remoto in /home/earlz/blah/bin/
. Come ulteriore vantaggio, verificherà innanzitutto se il file sul lato remoto non è cambiato e, in caso contrario, non lo invierà nuovamente. Inoltre, puoi aggiungere un'opzione -z e la comprimerà per te.