Réponses:
Vous pouvez l'utiliser rsync
pour cela. rsync
est vraiment conçu pour ce type d'opération.
Syntaxe:
rsync -avh /source/path/ host:/destination/path
ou
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
Lorsque vous l'exécutez pour la première fois, il copiera tout le contenu, puis ne copiera que les nouveaux fichiers.
Si vous avez besoin de tunneler le trafic via une connexion SSH (par exemple, à des fins de confidentialité), comme indiqué par votre demande initiale d'une solution basée sur SCP, ajoutez simplement -e ssh
les paramètres à rsync
. Par exemple:
rsync -avh -e ssh /source/path/ host:/destination/path
rsync -t *.c foo:src/
-> "Cela transfèrerait tous les fichiers correspondant au modèle * .c du répertoire actuel vers le répertoire src sur la machine foo. Si l'un des fichiers existe déjà sur le système distant, alors la télécommande rsync - le protocole de mise à jour est utilisé pour mettre à jour le fichier en n'envoyant que les différences "
rsync -avuzh /source/path/ host:/destination/path
. Cela fait tout le travail en une seule commande, et lors des appels suivants, ne transfère que les fichiers qui en ont besoin.
Si vous souhaitez rester avec scp pour une raison quelconque, vous pouvez supprimer les autorisations w sur vos données locales (si vous en avez le droit) et scp ne les touchera pas. Être plus précis:
chmod a-w local/*.tar.gz
(dans votre répertoire local)scp remote/*.tar.gz local
Ce n'est pas très efficace, agréable mais pourrait aider si vous avez besoin d'une solution temporaire rapide sans changer pour autre chose que scp. (Kudos: scp sans remplacer les fichiers existants dans la destination )
Il n'y avait pas de réponse exacte sur la façon de procéder avec SCP, car c'était ce que la question initiale demandait.
sudo find /files/ -type f -exec chmod a-w {} \;
scp -r username@server.com:/file/location/* /files
Une fois la copie des fichiers terminée, modifiez à nouveau les autorisations:
sudo chmod a+w -R /files
--ignore-existing
vraiment nécessaire?