Risposte:
sftp, come cpe 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' -ropzione.
Quindi, aggiungi -ral comando.
-ral sftpcomando 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' -aopzione 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 -Pper evitare un errore strano (bug?) protocol version mismatch); -z= abilita la compressione dei dati trasferiti.
-lswitch deve essere utilizzato o meno. Mi ricordo le versioni precedenti non hanno incluso -lin -a.
Potresti anche essere in grado di utilizzare l'uso scp. Il formato generale è
scp -rp sourceDirName username@server:destDirName
scpsignifica "copia protetta". Le bandiere sono
-r ricorrere in sottodirectory-p preservare i tempi di modificaCredo che il resto degli articoli sia autoesplicativo
Se rsyncnon è un'opzione, vorrei quindi raccomandare lftp:
lftp sftp://user@host.com/path/path/
Quindi utilizzare il mirrorcomando 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-runper fare una prova per assicurarsi che stia facendo ciò che ci si aspetta.)
O per caricare senza ricorsione:
mirror --no-recursion
Devi cdentrare 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 è:
sshper accedere al computer remotosftpdal computer remoto al computer localegetcomando con l' -ropzione 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. sftprichiede 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) .