2012-02-08 13:15:37 +0000 2012-02-08 13:15:37 +0000
29
29

sftp: caricare tutti i file, le directory e le sotto-directory contenute in una cartella

Sulla macchina A ho la cartella

/home/a/

Sulla macchina B ho la cartella

/home/b/

Vorrei trasferire tutti i file, directory e sotto-directory di /home/a in /home/b con sftp Sulla macchina A ho provato i comandi:

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

ma non funziona, ricevo il messaggio di errore: “saltare il file non regolare /home/a/a1”… [a1 è una sotto-directory di a] Come posso modificare l'istruzione put?

Grazie! :)

EDIT:

Ho risolto usando scp:

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

Risposte (6)

21
21
21
2014-10-02 20:33:25 +0000

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

put -r .

Vedi man sftp .

21
21
21
2012-02-08 22:41:19 +0000

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

Nel tuo caso, la sintassi sarebbe

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

L'opzione -r è per copiare ricorsivamente i file, -z abilita la compressione durante il trasferimento, e -p conserva i permessi dei file (creazione, modifica, ecc.) durante la copia, che è qualcosa che scp non fa AFAIK. Molte altre opzioni sono possibili; come al solito, leggete le pagine di man.

10
10
10
2012-02-08 16:04:32 +0000

scp (secure copy) è il de facto di Linux per trasferire file su un tunnel sicuro. Nel tuo caso vorresti usare lo switch ricorsivo, ad es:

scp -r /home/a/ user@remote.host.com:/home/b/
4
4
4
2014-01-04 14:02:14 +0000

Prova a usare

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

per maggiori informazioni controlla: questo

0
0
0
2017-10-05 13:53:58 +0000

In realtà, put -r dovrebbe funzionare. Ma la cartella di destinazione deve essere presente sull'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
-1
-1
-1
2014-02-14 10:10:51 +0000

Nel mio caso rsync non era possibile quindi ho usato:

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