Copiar una carpeta parece algo banal hasta el día en que el directorio contiene archivos ocultos, enlaces simbólicos o fechas útiles para un script. cp -r copia la estructura del árbol, pero cp -a es a menudo la mejor opción para duplicar una carpeta de trabajo sin modificar sus atributos.
Antes de eliminar la fuente, crea la copia, verifícala y abre algunos archivos. Un comando exitoso no prueba que hayas apuntado al camino correcto.

Elegir entre cp -r y cp -a
cp -r desciende en los subdirectorios. Las entradas que comienzan con un punto están bien incluidas cuando copias la carpeta misma. Sin embargo, evita el globbing del tipo * si también esperas los archivos ocultos: el shell los ignora por defecto.
cp -a activa el modo archivo. Conserva tanto como sea posible los permisos, propietarios, fechas, enlaces simbólicos y enlaces físicos. Para una copia de seguridad local o una migración de directorio, generalmente es el comando a privilegiar. Puede requerir permisos elevados si debes preservar un propietario que tu cuenta no puede definir.
cp -a -- /srv/app/ /srv/app-copie/
El -- separa las opciones de los caminos. Evita que un archivo que comienza con un guion sea interpretado como una opción. La barra final de la fuente significa que copias su contenido en /srv/app-copie/. Si esta carpeta ya existe, verifica la estructura obtenida antes de continuar.
Preparar un destino sin sobrescribir la carpeta incorrecta
Primero crea un destino claramente nombrado, luego lista ambos lados. En un servidor, no inicies una copia recursiva hacia un camino construido a mano en un script sin mostrar este camino en los registros.
mkdir -p -- /srv/app-copie
find /srv/app -maxdepth 1 -printf '%fn' | sort
find /srv/app-copie -maxdepth 1 -printf '%fn' | sort
Si quieres rechazar cualquier sobrescritura durante un primer intento, añade -n. Esta opción ignora los archivos ya presentes, por lo que no es adecuada para una sincronización completa. Para reemplazar datos existentes, haz una copia de seguridad o trabaja en un nuevo directorio, y luego cambia el servicio hacia la copia validada.
Controlar los archivos, los derechos y los enlaces
Comienza verificando los archivos ocultos y los derechos. ls -la muestra los nombres que comienzan con un punto. stat permite comparar los permisos y las fechas de un archivo sensible.
ls -la /srv/app
ls -la /srv/app-copie
stat -c '%n %a %U:%G %y' /srv/app/config.ini /srv/app-copie/config.ini
find /srv/app-copie -type l -ls
El último comando lista los enlaces simbólicos. Con cp -a, un enlace normalmente sigue siendo un enlace. Con una copia menos adecuada, puedes terminar con el contenido de su destino o un enlace que se ha vuelto inválido después del movimiento.
- cuenta los archivos con
find ... -type f | wc -l; - abre el archivo de configuración más importante;
- prueba el programa contra la copia antes de eliminar la fuente;
- mantén la fuente mientras el servicio o el script no haya pasado su control funcional.
Para comparar el contenido de dos estructuras, diff -qr /srv/app /srv/app-copie señala los archivos que difieren. No reemplaza una validación de la aplicación, pero detecta rápidamente una copia incompleta.
Si también necesitas corregir los permisos después de una duplicación, la guía sobre chmod recursivo en Linux explica por qué un chmod -R ejecutado demasiado pronto puede romper ejecutables. Para encontrar un archivo antes de la copia, también utiliza find en Linux.