Risposte:
Puoi usarlo rsync
per 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 ssh
i parametri a rsync
. Per esempio:
rsync -avh -e ssh /source/path/ host:/destination/path
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 "
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.
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:
chmod a-w local/*.tar.gz
(nella tua directory locale)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 )
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
--ignore-existing
veramente richiesto?