> La lista completa de artículos está en [llms.txt](https://docs.f3cloud.com/llms.txt). Cada página tiene versión en Markdown, basta con añadir .md a su dirección. Esta página en Markdown: [https://docs.f3cloud.com/es/technical-docs/cp-command-tutorial.md](https://docs.f3cloud.com/es/technical-docs/cp-command-tutorial.md).

# Comando cp en Linux para copiar archivos y directorios

Cómo copiar archivos y carpetas con el comando cp en Linux. Sintaxis y ejemplos, copia conservando los permisos, sin sobrescribir, con archivos ocultos, copias de seguridad al sobrescribir, progreso de la copia y errores frecuentes.

**cp** (del inglés copy) es el comando estándar de Linux para copiar archivos y carpetas. Viene en cualquier distribución, así que no hace falta instalar nada.

A continuación repasamos los trucos principales que te serán útiles al trabajar con un servidor, desde copiar un solo archivo hasta trasladar una web conservando los permisos. Hemos probado los ejemplos en Debian 12, y en Ubuntu y otras distribuciones con GNU coreutils funcionan igual.

***

### Sintaxis

```bash
cp [opciones] origen destino
```

Si el destino es una carpeta que ya existe, el archivo se copiará en ella con el mismo nombre. Si esa carpeta no existe, `cp` creará una copia con el nombre indicado.

***

### Ejemplos básicos

```bash
# Copiamos un archivo a una carpeta
cp config.yml /root/backup/

# Hacemos una copia del archivo al lado con otro nombre, por ejemplo antes de cambiar la configuración
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

# Copiamos varios archivos a una misma carpeta
cp file1.txt file2.txt /root/backup/

# Copiamos una carpeta con todo su contenido
cp -r /var/www/site /root/backup/
```

***

### Opciones útiles

| Opción | Qué hace |
| --- | --- |
| `-r` | Copia carpetas enteras, con todo su contenido |
| `-a` | Modo archivo. Copia carpetas y conserva los permisos, el propietario, las fechas y los enlaces |
| `-p` | Conserva en la copia los permisos, el propietario y las fechas de modificación |
| `-i` | Pide confirmación antes de sobrescribir un archivo existente |
| `-n` | Nunca sobrescribe archivos existentes |
| `-u` | Copia solo si el origen es más reciente o si el archivo aún no existe en el destino |
| `-b` | Antes de sobrescribir, guarda el archivo antiguo con una virgulilla al final del nombre |
| `-v` | Muestra cada archivo copiado |

***

### Copiar una web conservando los permisos

Para trasladar webs y configuraciones, usa `-a`. Así la copia conservará el propietario, los permisos de acceso y las fechas, y el servidor web podrá trabajar con los archivos sin ajustes adicionales.

```bash
# Copiamos el contenido de la carpeta de la web junto con los archivos ocultos
cp -a /var/www/site/. /var/www/site-copy/
```

> **Cómo copiar los archivos ocultos.**
>
> El punto al final de la ruta `/var/www/site/.` significa «todo el contenido de la carpeta», incluidos los archivos ocultos como `.htaccess` y `.env`. No uses para esto el patrón `.*`. En las versiones antiguas de bash también incluye `..`, es decir, la carpeta superior, y `cp` copiará mucho más de lo necesario.

***

### No sobrescribir los archivos que necesitas

```bash
# Preguntar antes de sobrescribir cada archivo
cp -i new.conf /etc/app/app.conf

# No tocar los archivos que ya existen y copiar solo los que faltan
cp -rn /root/backup/site/. /var/www/site/

# Sobrescribir, pero guardar la versión antigua como app.conf~
cp -b new.conf /etc/app/app.conf
```

***

### Copiar solo los archivos modificados

```bash
# Actualizamos la copia, solo se transfieren los archivos nuevos y modificados
cp -au /var/www/site/. /root/backup/site/
```

Para copias periódicas y carpetas grandes es más cómodo `rsync`, que hace lo mismo y además muestra el progreso.

***

### Cómo ver el progreso de la copia

`cp` no tiene indicador de progreso, y la opción `-v` solo muestra los nombres de los archivos. Para archivos y carpetas grandes, usa `rsync`.

```bash
# Instalamos rsync si aún no está instalado
apt install -y rsync

# Copiamos la carpeta con un indicador de progreso general
rsync -a --info=progress2 /var/www/site/ /root/backup/site/
```

Para copiar archivos entre servidores es cómodo usar `scp` o `rsync`, y tienes ejemplos en el artículo [sobre las copias de seguridad](https://docs.f3cloud.com/es/client-area/protect-vps-from-unauthorised-access/backups.md).

***

### Preguntas frecuentes

<details>

<summary>Error «-r not specified; omitting directory»</summary>

Estás intentando copiar una carpeta sin la opción `-r`. Añade `-r` o `-a`, por ejemplo `cp -a /var/www/site /root/backup/`.

</details>

<details>

<summary>Error «No space left on device»</summary>

Se ha acabado el espacio en el disco. Mira cuánto queda libre con el comando `df -h`, borra lo que sobre o pásate a un plan con un disco más grande. Es mejor borrar el archivo copiado a medias en el destino.

</details>

<details>

<summary>Error «Permission denied»</summary>

Tu usuario no tiene permisos para leer el origen o para escribir en la carpeta de destino. Ejecuta el comando con `sudo` o revisa los permisos con el comando `ls -l`.

</details>

<details>

<summary>¿Se puede interrumpir la copia?</summary>

Sí, pulsa <kbd>Ctrl</kbd> + <kbd>C</kbd>. Los archivos ya copiados se quedarán en su sitio, pero el último puede haberse copiado solo en parte. Para copiar después el resto, vuelve a ejecutar el comando con la opción `-u` o usa `rsync`.

</details>

<details>

<summary>Después de copiarla, la web ha dejado de funcionar</summary>

Lo más probable es que la copia haya cambiado de propietario porque copiaste sin la opción `-a`. Devuelve el propietario con el comando `chown -R www-data:www-data /var/www/site-copy` en Ubuntu y Debian o vuelve a copiar la carpeta con `-a`.

</details>

***

### Nuestros recursos

**Canal de Telegram:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Web del hosting:** [https://f3cloud.com](https://f3cloud.com/es)
