Risposte:
Sì, usa -r
:
scp -rp sourcedirectory user@dest:/path
Nota: questo crea l' sourcedirectory
interno, /path
quindi i file saranno in/path/sourcedirectory
-pr
(le opzioni in ordine inverso) non copieranno le cartelle, ma piuttosto il loro contenuto nella directory di destinazione (apparentemente, l'ordine delle opzioni è importante).
Mentre le risposte precedenti sono tecnicamente corrette, dovresti anche considerare di utilizzare rsync
invece. rsync
confronta i dati sui lati di invio e ricezione con un meccanismo diff in modo da non dover inviare nuovamente i dati già inviati in precedenza.
Se hai intenzione di copiare qualcosa su una macchina remota più di una volta, usa rsync
. In realtà, è buono da usare rsync
ogni volta perché ha più controlli per cose come copiare le autorizzazioni e la proprietà dei file ed escludere determinati file o directory. In generale:
$ rsync -av /local/dir/ server:/remote/dir/
sincronizzerà una directory locale con una directory remota. Se lo esegui una seconda volta e il contenuto della directory locale non è cambiato, nessun dato verrà trasferito, molto più efficiente dell'esecuzione scp
e della copia di tutto ogni volta.
Inoltre, rsync
ti consente di recuperare molto facilmente da trasferimenti interrotti, a differenza scp
.
Infine, le versioni moderne di rsync
default funzionano su ssh, quindi se scp
funziona già, rsync
dovrebbe essere praticamente una sostituzione drop-in.
rsync
è più efficiente. Una cosa che attualmente non scp
fa è consentire la copia tra host remoti (almeno senza eseguire il client rsync su uno di essi).
-av
: v è per verbose, a per archivio ed è una scorciatoia per -rlptgoD che implica collegamenti ricorsivi, preservare date e collegamenti del proprietario dei diritti. Se vuoi solo un uso ricorsivo-r
Ecco a cosa serve l' -r
opzione. :)
Vedi la pagina man di scp per maggiori informazioni se necessario.
Opzione di copia ricorsiva '-r' (lettere minuscole)
scp -r
Che confondo con la normale opzione di copia ricorsiva locale '-R' (lettere maiuscole)
cp -R
Il modo migliore è usare rsync su SSH
rsync -a -essh /source/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
Le mie opzioni preferite sono -Pazvessh --delete:
rsync
che ho usato userebbero ssh
di default, quindi -essh
è improbabile che siano necessarie. E la scelta del comando utilizzato per connettersi all'host remoto non è in alcun modo correlata alla copia ricorsiva.
Dopo aver cercato il flag di copia ricorsiva e averlo utilizzato con successo grazie a questo post, vorrei pubblicare solo un suggerimento.
Se il caso è che stai copiando (ricorsivamente) una directory. Forse se i file vengono inviati compressi potresti risparmiare tempo nel trasferimento
Quello che ho fatto alla fine è stato:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
Spero che sia di aiuto
.tar.gz
o .tgz
poiché il file è un archivio tar con gzip (poiché -z
viene utilizzato il flag).
Puoi ricorsivamente copiare una directory in un archivio compresso con questo semplice comando:
ssh -p 22 user@address-to-copy-from.com 'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz
Ad esempio, per copiare il contenuto di /var/log
da domain.com
a ~/logs.tgz
si esegue:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' > ~/logs.tgz
È inoltre possibile estrarre i file sul sistema di destinazione utilizzando le pipe. Questo comando copiare il contenuto di /var/log
a domain.com
per ~/destination/log
il vostro sistema:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' | tar xzf - -C ~/destination
Anche se per eseguire il mirroring di una directory, probabilmente dovresti usare rsync
...
Se si preferisce passare la password dell'utente come parametro anziché immetterla in modo interattivo, è possibile utilizzare sshpass
( sudo apt-get install -y sshpass
).
Esempio:
sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder
Puoi usare l'opzione -r con il comando scp per copiare ricorsivamente directory su qualsiasi sistema. Se hai bisogno di qualcos'altro, fai riferimento al tutorial sul comando scp . -r opzione sta per operazione ricorsiva nella maggior parte dei comandi di Linux.
-r
opzione è già stata suggerita anni fa ed è la risposta accettata.
Un'altra opzione (probabilmente migliore per un uso ripetuto) è l'uso di NFS: controlla nfs-kernel-server e come impostare le condivisioni NFS.
scp
useresti ma NFS non è un'opzione.