linux - sustituir - ¿Cómo puedo copiar recursivamente un directorio en otro y reemplazar solo los archivos que no han cambiado?
sed reemplazar/ (3)
- -u sobrescribe la carpeta de archivos existente si el destino es anterior a la fuente
- -p conserva el permiso y las fechas
- -f desactiva la verbosidad
- -r hace que la copia sea recursiva
Así que parece que tienes todos los argumentos correctos para cp
Estoy buscando hacer una copia específica en Fedora.
Tengo dos carpetas:
''webroot'': manteniendo 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:
- Sobrescribir 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)
- Conserve los permisos / usuarios / grupos del archivo si se sobrescribe (la versión de exportación que reemplaza a la versión en vivo) * NOTA Me gustaría que se mantuvieran los permisos / propiedad de webroots, pero con el contenido de exportación
- No se solicita / detiene la copia de ningún tipo (es decir, no se detalla)
- Copia recursiva: obviamente me gustaría copiar todas las carpetas y subcarpetas de archivos * que se encuentran en la exportación
He investigado un poco sobre cp. ¿Esto haría el trabajo ?:
cp -pruf ./export /path/to/webroot
Podría, pero en cualquier momento 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 puede especificar para modificar su comportamiento: consulte la página de manual para obtener más información.
EDITAR : con respecto a su aclaración sobre lo que quiere decir al preservar los permisos: probablemente querrá dejar la opción -p
.
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 propietarios, tiene que 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.