Necesito copiar una carpeta / home / user de un disco duro a otro. Tiene 100.000 archivos y alrededor de 10G de tamaño.
yo suelo
cp -r /origin /destination
a veces recibo algunos errores debido a enlaces rotos, permisos, etc. Así que soluciono el error y necesito comenzar de nuevo la copia.
Me pregunto cómo podría decirle al comando "cp", una vez que intente copiar nuevamente, no copiar archivos nuevamente si existen en la carpeta de destino.
Respuestas:
cp -R -u -p /source /destination
La
-u
( o--update
) bandera hace exactamente esto:Desde la página del manual para cp:
fuente
yes n | cp -i /source/* /destination 2>/dev/null
Solo úsalo
cp -n <source> <dest>
.Desde la página del manual :
fuente
rsync -aq /src /dest
Además de copiar solo los archivos más nuevos, incluso solo copiará las partes más nuevas de los archivos si el archivo ha cambiado. Está destinado a copiar a través de enlaces de red donde desea minimizar la cantidad de datos, pero también funciona muy bien a nivel local.
fuente
Busque la opción "-u" para el
cp
comando.fuente
Todas las respuestas anteriores son correctas, pero si lo hace de forma recursiva, entonces
deberías hacer:
fuente
Debería copiar como root para mantener los permisos / propiedad
También mira rsync
fuente
Solución POSIX
Otras respuestas de uso
-u
u-n
opciones decp
. Ninguno de estos es requerido por POSIX ; ni esrsync
de otra respuesta más; ni seyes
usa en uno de los comentarios.Aún así podemos reproducirnos
yes n
con unwhile
bucle. Esto lleva a la siguiente solución POSIX:fuente
Utilizar
cp -rn <sourcedirname>/. <destdirname>
El interruptor r hace que la copia sea recursiva sobre los directorios.
El interruptor n (versión larga no-clobber) garantiza que los archivos existentes nunca se sobrescriban.
El '
/.
' después del nombre de origen asegura que no se convierta en un subdirectorio debajo del nombre de nombre en lugar de que todos los contenidos del primero se copien en el segundo.fuente