Risposte:
sftp
, come cp
e scp
, richiede che quando copi una cartella (e il suo contenuto, ovviamente), devi dirlo esplicitamente che vuoi trasferire la cartella in modo ricorsivo con l' -r
opzione.
Quindi, aggiungi -r
al comando.
-r
al sftp
comando quando ti connetti. sftp -r user@host
Couldn't canonicalise: No such file or directory
.
# sftp user@remote-host
#> get -r remote-folder
Posso solo suggerire, tu usi rsync
. È in qualche modo uno standard industriale, quando si spostano file su connessioni sicure.
rsync -alPvz ./source_dir server.com:destination_dir
È quello che uso da anni ormai.
(l' -a
opzione si occupa di cose come la ricorsione della directory)
-a
= ricorsione + mantenere collegamenti simbolici, permessi, tempi di modifica, proprietario, gruppo, file speciali e file del dispositivo (quest'ultimo richiede privilegi di superutente); -l
= conserva collegamenti simbolici (già inclusi in -a
); -P
= mostra l'avanzamento durante il trasferimento + conserva i file parzialmente trasferiti; -v
= modalità dettagliata (tuttavia sembra obbligatorio quando si utilizza -P
per evitare un errore strano (bug?) protocol version mismatch
); -z
= abilita la compressione dei dati trasferiti.
-l
switch deve essere utilizzato o meno. Mi ricordo le versioni precedenti non hanno incluso -l
in -a
.
Potresti anche essere in grado di utilizzare l'uso scp
. Il formato generale è
scp -rp sourceDirName username@server:destDirName
scp
significa "copia protetta". Le bandiere sono
-r
ricorrere in sottodirectory-p
preservare i tempi di modificaCredo che il resto degli articoli sia autoesplicativo
Se rsync
non è un'opzione, vorrei quindi raccomandare lftp
:
lftp sftp://user@host.com/path/path/
Quindi utilizzare il mirror
comando per caricare ricorsivamente, in questo modo:
mirror -R
(Si noti che la ricorsione è l'impostazione predefinita. -R
È per il contrario : per caricare il comando mirror anziché il download. Provare ad aggiungere --dry-run
per fare una prova per assicurarsi che stia facendo ciò che ci si aspetta.)
O per caricare senza ricorsione:
mirror --no-recursion
Devi cd
entrare nelle directory che vuoi rispecchiare. Funziona alla grande!
Se puoi, usa sshfs . È un filesystem FUSE , disponibile sulla maggior parte dei moderni unices e funziona con qualsiasi server SFTP. Questo è un filesystem remoto: ti permette di manipolare i file remoti (tramite il protocollo SFTP) con le solite utility.
mkdir /mount/point
sshfs server.example.com:/remote/path /mount/point
ls /mount/point
cp -Rp /mount/point/somedir /local/location
fusemount -d /mount/point
È un po 'difficile ma quello che funziona per me è:
ssh
per accedere al computer remotosftp
dal computer remoto al computer localeget
comando con l' -r
opzione per spostare la directory e tutti i suoi file.sftp> get -r data /opt/bin get: Invalid flag -r
Se la tua domanda è in realtà "come posso usare sftp per trasferire una directory", allora
sftp -r user@server
Ma se trasferisci una directory, potrei suggerire due opzioni migliori, a seconda delle tue esigenze. sftp
richiede l'accesso al server remoto in un prompt dei comandi simile a ssh, ma se tutto ciò che desideri sono i file, ci sono modi più facili e veloci.
Scp
Per un trasferimento una tantum, per caricare provare:
# upload source directory to remote server
scp -rp source_dir user@server:dest
#download directory from remote server:
scp -rp user@server:source_dir dest
#specifying ssh key:
scp -rp -i ~/.ssh/key user@server:source_dir dest
#remote directory has spaces
scp -rp -i ~/.ssh/key user@server:"source\\ dir" dest
rsync
Se hai intenzione di sincronizzare le directory su base regolare, l'uso di rsync ha più senso. Esegue delta tra le due directory, risparmiando tempo e dati di trasferimento via cavo.
rsync -r -a -v -e ssh --delete source_dir user@server:dest
Ecco un elenco di alcune delle opzioni rsync più comuni: ( presa da qui )
Spero che aiuti!
puoi andare dal server al tuo percorso locale da
scp -rp user@server:directoryname(full path) .