Tutoriel Linux

Copiar un directorio de Linux con archivos ocultos y permisos

Débutant3 min de lecture

Copiar un directorio puede parecer trivial 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, pero cp -a suele ser la mejor opción para duplicar un directorio de trabajo sin modificar sus atributos.

Antes de eliminar la fuente, crea la copia, verifícala y abre algunos archivos. Un comando exitoso no demuestra que hayas apuntado al camino correcto.

Copia segura de dos directorios en almacenamiento Linux
Primero copia, luego verifica los archivos, permisos y enlaces.

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 el directorio en sí. Evita, sin embargo, los globbing del tipo * si también esperas los archivos ocultos: el shell los ignora por defecto.

cp -a activa el modo de 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 las rutas. Evita que un archivo que comienza con un guion sea interpretado como una opción. La barra final de la fuente significa aquí que copias su contenido en /srv/app-copie/. Si este directorio ya existe, verifica la estructura obtenida antes de continuar.

Preparar un destino sin sobrescribir el directorio incorrecto

Primero crea un destino claramente nombrado, luego lista ambos lados. En un servidor, no inicies una copia recursiva hacia una ruta construida manualmente en un script sin mostrar esa ruta 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 deseas rechazar toda 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, luego cambia el servicio hacia la copia validada.

Controlar los archivos, los permisos y los enlaces

Comienza verificando los archivos ocultos y los permisos. 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 suele permanecer como un enlace. Con una copia menos adecuada, puedes terminar con el contenido de su objetivo o un enlace que se ha vuelto inválido después de moverse.

  • 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 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 rápido puede romper ejecutables. Para encontrar un archivo antes de la copia, utiliza también find en Linux.

sudo apt update && sudo apt upgrade