El comando cp en Linux: 7 ejemplos prácticos

El comando cp en Linux se utiliza para copiar archivos y directorios. En este tutorial, aprenderás algunos de los usos esenciales del comando cp.
Warp Terminal

Uno de los comandos que debes conocer en Linux es cp. A menudo se le llama el comando de copiar en Linux y en realidad es la abreviatura de copia y hace exactamente lo que su nombre sugiere.

cp se utiliza para copiar archivos de una ubicación a otra. cp también se puede utilizar para copiar directorios enteros en una nueva ubicación. También se puede utilizar para copiar múltiples archivos y directorios.

7 ejemplos de uso del comando cp en Linux

Veamos cómo puedes usar el comando cp para varios propósitos:

1. Cómo copiar un archivo

El ejemplo más sencillo sería copiar un archivo. Para ello, basta con especificar el archivo de origen y el directorio o archivo de destino.

cp archivo_origen directorio_objetivo/archivo_objetivo

En el ejemplo anterior, si el archivo_objetivo no existe en el directorio_objetivo, creará el archivo_origen.

Sin embargo, si el archivo_origen ya existe, lo sobrescribirá sin preguntar. Lo que significa que el contenido del archivo de destino existente se cambiará con el contenido del archivo de origen.

Te mostraré cómo lidiar con la sobreescritura de archivos más adelante en este tutorial.

👉
Ten en cuenta: Por defecto, los comandos cp sobrescriben si el archivo de destino ya existe. Este comportamiento se puede cambiar con las opciones -n o -i, que se explican más adelante.

2. Cómo copiar varios archivos

Si quieres copiar varios archivos a la vez en una nueva ubicación, puedes hacerlo de la siguiente manera:

cp archivo1 archivo2 archivo3 archivoN directorio_objetivo

Esto copiará todos los archivos especificados en el directorio objetivo. Si el directorio de destino tiene archivo(s) que coinciden con el nombre del archivo(s) de origen, se sobrescribirá.

3. Múltiples formas de tratar la sobreescritura mientras se copian los archivos

Probablemente no siempre querrás que tus archivos de destino existentes se sobrescriban y eso es totalmente lógico.

Para evitar la sobreescritura de archivos existentes, puedes utilizar la opción -n. De esta manera, cp no sobrescribirá los archivos existentes.

cp -n archivo_origen directorio_objetivo

Pero tal vez quieras sobrescribir algunos archivos. Puedes utilizar la opción interactiva -i y te preguntará si quieres sobrescribir los archivos existentes.

cp -i archivo_origen directorio_objetivo
cp: overwrite 'directorio_objetivo/archivo_origen'?

Puedes introducir y para sobrescribir el archivo existente o n para no sobrescribirlo.

También hay una opción para hacer copias de seguridad automáticas. Si utiliza la opción -b con el comando cp, sobrescribirá los archivos existentes, pero antes creará una copia de seguridad de los archivos sobrescritos.

cp -b file.txt directorio_objetivo/file.txt
ls directorio_objetivo
file.txt file.txt~

La copia de seguridad del archivo termina con ~.

También puedes utilizar la opción de actualización -u cuando se trata de sobrescribir. Con la opción -u, los archivos de origen sólo se copiarán en la nueva ubicación si el archivo de origen es más reciente que el archivo existente o si no existe en el directorio de destino.

Para resumir:

  • -i : Confirmar antes de sobrescribir
  • -n : No sobrescribir
  • -b : Sobrescribir con la copia de seguridad
  • -u : Sobrescribir si el archivo de destino es antiguo o no existe

4. Cómo copiar un directorio en Linux

También puedes utilizar el comando cp para copiar un directorio en Linux incluyendo todos sus archivos y subdirectorios. En este caso hay que utilizar la opción -r que significa recursivo.

cp -r directorio_origen directorio_objetivo

Esto copiará todo el directorio_de_origen en el directorio_de_objetivo. Ahora el directorio_fuente será un subdirectorio del directorio_objetivo.

5. Cómo copiar sólo el contenido de un directorio, no el propio directorio

ls directorio_objetivo
directorio_origen

En el ejemplo anterior, ha copiado todo el directorio en una nueva ubicación.

Pero si sólo quieres copiar el contenido del directorio de origen en el directorio de destino, debe añadir /. al final del directorio de origen. Esto indicará que sólo quieres copiar el contenido del directorio de origen.

Veámoslo con un ejemplo:

ls directorio_origen
archivo_origen_1 archivo_origen_2

Ahora copia el contenido del directorio de origen:

cp -r directorio_origen/. directorio_objetivo

Si ahora compruebas el contenido del directorio de destino, verás que sólo se ha copiado el contenido del directorio de origen.

ls directorio_objetivo
archivo_origen_1 archivo_orige_2

6. Cómo copiar múltiples directorios

También puedes copiar varios directorios a la vez con el comando cp en Linux.

Sólo tienes que utilizarlo de la misma manera que lo hiciste para un solo directorio.

cp -r directorio_origen_1 directorio_origen_2 directorio_origen_3 directorio_objetivo

Siempre es el último argumento del comando el que se toma como directorio de destino.

Si quieres copiar sólo el contenido de varios directorios a la vez, también puedes hacerlo:

cp -r directorio_origen_1/. directorio_origen_2/. directorio_origen_3/. directorio_objetivo

De hecho, puedes mezclar directorios, su contenido y archivos en conjunto.

cp -r directorio_origen_1 directorio_origen_2/. archivo_origen directorio_objetivo
💡
Consejo: Puedes utilizar el modo verbose con la opción -v para ver qué archivos se están copiando.

7. Cómo conservar los atributos al copiar

Cuando se copia un archivo a una nueva ubicación, sus atributos, como los permisos y las marcas de tiempo del archivo, se modifican.

Si deseas conservar los atributos del archivo original, puede copiar los archivos con la opción -p.

Veámoslo con un ejemplo.

ls -l /etc/services 

-rw-r--r-- 1 root root 19183 Jul 23  2022 /etc/services

Si intentas copiar este archivo normalmente, sus atributos cambiarán:

cp /etc/services .
ls -l services 
-rwxrwxrwx 1 marcocarmonaga marcocarmonaga 19183 Jul 23 20:45 service

Pero si uso la opción p, el archivo copiado conservará el modo, la propiedad y la marca de tiempo.

cp -p /etc/services .
ls -l services 
-rw-r--r-- 1 marcocarmonaga marcocarmonaga 19183 Jul 23  2022 services

Como puedes ver, ha conservado el modo de acceso y la marca de tiempo del archivo fuente con la opción -p.

Pero ¡espera! ¿No se supone que debe preservar la propiedad de los archivos fuente también? Pero aquí el propietario (root) del archivo fuente ha sido cambiado a marcocarmonaga.

Esto se debe a que sólo root tiene permiso para cambiar la propiedad de un archivo que es propiedad de root. Si usas la opción -p con un archivo que no es propiedad de root, conservará la propiedad. O bien, puedes ejecutar el comando con sudo para preservar la propiedad de un archivo propiedad de root.

También puedes especificar los atributos que quieres preservar. Pero entonces tendrás que usar la opción –preserve.

cp --preserve=timestamp /etc/services .
ls -l services 
-rw-r--r-- 1 marcocarmonaga marcocarmonaga 19183 Jul 23  2022 services

Como puede ver en la salida anterior, sólo se ha conservado la marca de tiempo del archivo fuente.

Puedes explorar más a fondo el comando cp navegando por su página man. Los ejemplos mostrados aquí son los más comunes que usarás como usuario de Linux, administrador de sistemas o desarrollador de software.

Si te ha gustado este tutorial, por favor comparte este artículo en las redes sociales y en varios foros.

About the author
Marco Carmona

Marco Carmona

My name is Marco Antonio Carmona, I'm a physics and data science student, a great and passionate reader, and randomly, my favorite hobby is writing about what I learn day by day.

Become a Better Linux User

With the FOSS Weekly Newsletter, you learn useful Linux tips, discover applications, explore new distros and stay updated with the latest from Linux world

itsfoss happy penguin

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to It's FOSS.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.