¿Cómo copiar solo archivos nuevos usando el comando "scp"?


24

Estaba copiando cientos de archivos a otra computadora usando el scpcomando que recibí el stalled error . Ahora voy a copiar los archivos nuevamente. ¿Hay alguna forma de evitar copiar los archivos ya copiados?

Respuestas:


40

Puedes usarlo rsync. rsyncestá 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 sshlos parámetros a rsync. Por ejemplo:

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

¿Es --ignore-existingrealmente necesario?
Meysam

Porque en este ejemplo de manual: 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 "
Meysam

1
Me suelen utilizar 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.
Edward Falk

6

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:

  1. chmod a-w local/*.tar.gz (en su directorio local)
  2. 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 )


Realmente me gusta esta solución. Estoy recopilando archivos de sensores remotos en un archivo. Todos los directorios de trabajo tienen un subdirectorio de archivo. Una vez que los archivos entran en el archivo, nunca se cambiarán. Sería realmente fácil marcar los archivos archivados como -w, así que esto será lo que haré. Y los archivos de trabajo fuera de los directorios de archivo pueden dejarse como están, así que si ejecuto el programa de actualización durante el día, seguirá copiando los archivos en progreso. Esto es precisamente lo que estaba buscando. TNX mucho!
SDsolar

4

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


1
Bueno, podría decirse que la pregunta original era "¿cómo puedo resolver este problema", para lo cual rsync es la respuesta.
Edward Falk
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.