Come copiare solo i nuovi file usando il comando "scp"?


24

Stavo copiando centinaia di file su un altro computer usando il scpcomando che ho ricevuto l' stalled errore . Ora copierò di nuovo i file. Esiste un modo per evitare di copiare i file già copiati?

Risposte:


40

Puoi usarlo rsyncper questo. rsyncè davvero progettato per questo tipo di operazione.

Sintassi:

rsync -avh /source/path/ host:/destination/path

o

rsync -a --ignore-existing /local/directory/ host:/remote/directory/

Quando lo esegui per la prima volta, copierà tutto il contenuto, quindi copierà solo i nuovi file.

Se è necessario eseguire il tunneling del traffico attraverso una connessione SSH (ad esempio, per motivi di riservatezza), come indicato da chi inizialmente richiede una soluzione basata su SCP, è sufficiente aggiungere -e sshi parametri a rsync. Per esempio:

rsync -avh -e ssh /source/path/ host:/destination/path

È --ignore-existingveramente richiesto?
Meysam,

Perché in questo esempio di manuale: rsync -t *.c foo:src/-> "Questo trasferirebbe tutti i file che corrispondono al modello * .c dalla directory corrente alla directory src sul computer della macchina. Se uno dei file esiste già sul sistema remoto, allora rsync remote- Il protocollo di aggiornamento viene utilizzato per aggiornare il file inviando solo le differenze "
Meysam

1
Io di solito uso rsync -avuzh /source/path/ host:/destination/path. Ciò fa l'intero lavoro in un solo comando, e nelle successive chiamate, trasferisce solo i file che ne hanno bisogno.
Edward Falk,

6

Se vuoi rimanere con scp per qualsiasi motivo, potresti rimuovere w autorizzazioni sui tuoi dati locali (se hai il diritto di farlo) e scp non li toccherà. Per essere più precisi:

  1. chmod a-w local/*.tar.gz (nella tua directory locale)
  2. scp remote/*.tar.gz local

Questo non è molto efficiente, bello ma potrebbe essere utile se hai bisogno di una soluzione temporanea veloce senza cambiare a qualcosa di diverso da SCP. (Kudos: scp senza sostituire i file esistenti nella destinazione )


Mi piace molto questa soluzione. Sto raccogliendo file da sensori remoti in un archivio. Tutte le directory di lavoro - ognuna ha un sottodirectory Archive. Una volta che i file vengono archiviati, non verranno mai modificati. Sarebbe davvero facile contrassegnare i file archiviati come -w, quindi sarà quello che faccio. E i file di lavoro al di fuori delle directory di archivio possono essere lasciati così come sono, quindi se eseguo il programma di aggiornamento durante il giorno continuerà a copiare i file in corso. Questo è esattamente quello che stavo cercando. TNX molto!
SDsolar

4

Non c'era una risposta esatta su come farlo con SCP, dato che era questa la domanda originale.

sudo find /files/ -type f -exec chmod a-w {} \;

scp -r username@server.com:/file/location/* /files

Al termine della copia dei file, modificare nuovamente le autorizzazioni:

sudo chmod a+w -R /files


1
Bene, probabilmente, la domanda originale era "come posso risolvere questo problema", per cui rsync è la risposta.
Edward Falk,
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.