¿Cómo puedo copiar recursivamente un directorio en otro y reemplazar solo los archivos que no han cambiado?

StackOverflow https://stackoverflow.com/questions/601247

Pregunta

Estoy buscando hacer una copia específica en Fedora.

Tengo dos carpetas:

  • 'webroot': contiene TODOS los archivos / imágenes web, etc.

  • 'exportar': carpeta que contiene miles de documentos PHP, CSS, JS que se exportan desde mi repositorio SVN.

El directorio de exportación contiene muchos de los mismos archivos / carpetas que la raíz, pero la raíz contiene otros adicionales que no se encuentran en la exportación.

Me gustaría fusionar todos los contenidos de exportación con mi webroot con las siguientes opciones:

  1. Sobrescribiendo el archivo en webroot si la versión de exportación contiene un código diferente al que está dentro de la versión de webroot (en vivo)
  2. Conserve los permisos / usuarios / grupos del archivo si se sobrescribe (la exportación versión que reemplaza a la versión en vivo) * NOTA Me gustaría que se mantuvieran los permisos / propiedad de webroots, pero con los contenidos de exportación
  3. No se solicita / detiene la copia de cualquier tipo (es decir, no detallado)
  4. copia recursiva - obviamente yo quisiera copiar todos los archivos * carpetas y subcarpetas encontradas en exportar

He investigado un poco sobre cp. ¿Haría esto el trabajo ?:

cp -pruf ./export /path/to/webroot
¿Fue útil?

Solución

Puede, pero cada vez que los archivos correspondientes en export y webroot tengan el mismo contenido pero diferentes tiempos de modificación, terminará realizando una operación de copia innecesaria. Probablemente obtendrías un comportamiento un poco más inteligente de rsync :

rsync -pr ./export /path/to/webroot

Además, rsync puede copiar archivos de un host a otro a través de una conexión SSH, si alguna vez tiene la necesidad de hacerlo. Además, tiene un montón de opciones que puedes especificar para modificar su comportamiento: consulta la página del manual para obtener más información.

EDIT : con respecto a su aclaración sobre lo que quiere decir al preservar los permisos: probablemente querrá dejar de lado la opción -p .

Otros consejos

  1. -u sobrescribe la carpeta de archivos existentes si el destino es anterior a la fuente
  2. -p conserva el permiso y las fechas
  3. -f desactiva la verbosidad
  4. -r hace que la copia sea recursiva

Parece que tienes todos los argumentos correctos para cp

Suena como un trabajo para cpio (y por lo tanto, probablemente, GNU tar también puede hacerlo):

cd export
find . -print | cpio -pvdm /path/to/webroot

Si necesita preservar a los propietarios, debe hacerlo como root, por supuesto. La opción -p es 'modo de paso', lo que significa copiar entre ubicaciones; -v es detallado (pero no interactivo; hay una diferencia); -d significa crear directorios según sea necesario; -m significa preservar el tiempo de modificación. De forma predeterminada, sin la opción -u , cpio no sobrescribirá los archivos en el área de destino que sean más nuevos que el del área de origen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top