sftp: carica tutti i file, le directory e le sottodirectory contenute in una cartella


27

Sulla macchina AI hai la cartella

/home/a/

Sulla macchina BI avere la cartella

/home/b/

Vorrei trasferire tutti i file, le directory e le sottodirectory di / home / a in / home / b con sftp Sulla macchina AI ha provato i comandi:

sftp fibon82@machineB.com
put /home/a/* /home/b/

ma non funziona, ricevo il messaggio di errore: "saltando il file non regolare / home / a / a1" ... [a1 è una sottodirectory di a]
Come posso modificare l'istruzione put?

Grazie! :)

MODIFICARE:

Ho risolto usando scp:

scp -r /home/a/ fibon82@machineB.com:/home/b/

2
put -ravrebbe funzionato anche lui.
WakiMiko,

1
Ok, ma come potrei sapere che per "put command" l'opzione -r è disponibile? Se guardo qui è descritta solo la bandiera -P ... Lo stesso nel manuale Grazie! :)
fibon82

Dovresti invece pubblicarlo come risposta.
NN,

Sì. Invece di MODIFICARE la tua domanda con la risposta, dovresti rispondere alla tua domanda e accettarla.

@ fibon82 Per il manuale aggiornato di OpenSSH sftp, consultare il progetto OpenSSH .
Martin Prikryl,

Risposte:


21

Sebbene non sia strettamente equivalente a sftp, rsync è un'alternativa molto potente per scp e sftp, specialmente quando aggiorna le copie dalla macchina A alla macchina B, in quanto non copia i file che non sono stati modificati; è anche in grado di rimuovere i file dalla macchina B che sono stati eliminati dalla macchina A (solo quando viene detto ovviamente).

Nel tuo caso, la sintassi sarebbe

rsync -zrp /home/a/ user@remote.host.com:/home/b/

L' -ropzione è per la copia ricorsiva di file, -zconsente la compressione durante il trasferimento e -pconserva le autorizzazioni per i file (creazione di file, modifica, ecc.) Durante la copia, cosa che scp non fa con AFAIK. Sono possibili molte più opzioni; come al solito, leggi le manpagine.


Ah grazie! :) Una cosa nuova che ho imparato!
fibon82,

@ fibon82: Prego :)
Karolos,

1
ti amo, ho sincronizzato 400 MB di dati in 1 minuto semplicemente usando il tuo codice. Vorrei aggiungere che dovresti anche usare --progress altrimenti non starai fissando nulla senza sapere cosa sta succedendo (ea quale velocità :))
Sandro Antonucci il

1
Purtroppo rsyncnon parla sftp-Protocollo. Quindi, se si imposta un sftp-chroot usando sshil build in,internal-sftp allora rsyncfallisce.
Tino,

17

In sftpquesto comando carica ricorsivamente il contenuto della directory corrente nella directory corrente remota:

 put -r .

Vedere man sftp.


Lo -rswitch è supportato solo da OpenSSH 5.4 .
Martin Prikryl,

1
Si noti che lo -rswitch è solo lato client (parte del sftpcomando). Quindi il lato server (qui: in ricezione) non necessita di OpenSSH 5.4, solo il client deve supportarlo.
Tino,

10

scp(copia protetta) è di fatto il Linux per il trasferimento di file su un tunnel sicuro. Nel tuo caso, vorrai utilizzare l'interruttore ricorsivo, ad esempio:

scp -r /home/a/ user@remote.host.com:/home/b/

5
sftp e scp sono in realtà protocolli diversi, entrambi basati su ssh.
paradroid

1
Sì, se il server consente solo il protocollo sftp, questa risposta non funziona.
рüффп,

4

Prova a usare

put -r /home/a/ /home/b/

per maggiori informazioni consulta: questo


1
Lo -rswitch è supportato solo da OpenSSH 5.4 .
Martin Prikryl,

Si noti che lo -rswitch è solo lato client (parte del sftpcomando). Quindi il lato server (qui: in ricezione) non necessita di OpenSSH 5.4, solo il client deve supportarlo. E: questa dovrebbe essere la risposta accettata , in quanto ottenere (il possibile non supportato) rsynccome risposta a una domanda taggata sftpè un po 'confuso.
Tino,

0

In realtà, put -r dovrebbe funzionare. Ma la cartella di destinazione deve essere presente sul tuo host remoto:

sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder
 Couldn't canonicalize: No such file or directory
 ....
sftp> mkdir sourcefolder
sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder/sourcefolder
 Entering sourcefolder/
 sourcefolder/file1
 sourcefolder/file2

Hai aggiunto riferimenti e prove a supporto di ciò che dichiari e hai confermato che questa risposta non ha già ricevuto risposta in una delle risposte esistenti sul post. Leggi "Perché ho bisogno di 50 reputazione per commentare" per assicurarti di capire come puoi iniziare a commentare.
Pimp Juice IT

-1

Nel mio caso rsyncnon è stato possibile, quindi ho usato:

mput -rp /home/a/ /home/b/

Non c'è mput comando in OpenSSH sftp. Forse ti riferisci a psftp?
Martin Prikryl,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.