Respuestas:
Puedes usarlo rsync
. rsync
está realmente diseñado para este tipo de operación.
Sintaxis:
rsync -avh /source/path/ host:/destination/path
o
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
Cuando lo ejecute por primera vez, copiará todo el contenido y luego copiará solo los archivos nuevos.
Si necesita tunelizar el tráfico a través de una conexión SSH (por ejemplo, con fines de confidencialidad), como lo indicó originalmente solicitando una solución basada en SCP, simplemente agregue -e ssh
los parámetros a rsync
. Por ejemplo:
rsync -avh -e ssh /source/path/ host:/destination/path
rsync -t *.c foo:src/
-> "Esto transferiría todos los archivos que coincidan con el patrón * .c desde el directorio actual al directorio src en la máquina. Si alguno de los archivos ya existe en el sistema remoto, entonces el rsync remote- el protocolo de actualización se utiliza para actualizar el archivo enviando solo las diferencias "
rsync -avuzh /source/path/ host:/destination/path
. Eso hace todo el trabajo en un comando, y en invocaciones posteriores, solo transfiere los archivos que lo necesitan.
Si desea seguir con scp por cualquier motivo, puede eliminar los permisos w en sus datos locales (si tiene derecho a hacerlo) y scp no lo tocará. Ser más preciso:
chmod a-w local/*.tar.gz
(en su directorio local)scp remote/*.tar.gz local
Esto no es muy eficiente, agradable, pero podría ayudar si necesita una solución temporal rápida sin cambiar a otra cosa que no sea scp. (Kudos: scp sin reemplazar los archivos existentes en el destino )
No hubo una respuesta exacta sobre cómo hacer esto con SCP, ya que esa era la pregunta original.
sudo find /files/ -type f -exec chmod a-w {} \;
scp -r username@server.com:/file/location/* /files
Cuando termine de copiar los archivos, vuelva a cambiar los permisos:
sudo chmod a+w -R /files
--ignore-existing
realmente necesario?