Si quieres trabajar con la línea de comandos en una de las numerosas di­s­tri­bu­cio­nes de código abierto de Linux, primero debes conocer varios de los comandos de Linux. Estos te permiten navegar por es­tru­c­tu­ras de carpetas, editar datos o, como en este caso, copiar archivos y di­re­c­to­rios. Con el comando CP (abre­via­tu­ra de “copy”) puedes hacer copias de archivos in­di­vi­dua­les o de carpetas enteras.

Dominios web
Compra y registra tu dominio ideal
  • Gratis SSL Wildcard para tra­n­s­fe­re­n­cias de datos más seguras
  • Gratis registro privado para más pri­va­ci­dad

¿Para qué necesitas CP en Linux?

Copiar archivos y carpetas es uno de los elementos básicos de cualquier sistema operativo y la mayoría de los usuarios lo hacen a diario. Las copias se utilizan para co­m­pa­r­ti­r­las con otras personas o para al­ma­ce­nar­las como copias de seguridad. Por regla general, esta he­rra­mie­n­ta es una parte integral (y ya instalada) de todo sistema de Linux, in­de­pe­n­die­n­te­me­n­te de la di­s­tri­bu­ción que se utilice. CP pertenece a los GNU Core Utilities (abreviado: “coreutils”). Este paquete contiene las he­rra­mie­n­tas más im­po­r­ta­n­tes y está di­s­po­ni­ble de forma gratuita en todas las di­s­tri­bu­cio­nes de Linux.

Sintaxis del comando CP de Linux

La función principal de CP es sencilla: copiar uno o más archivos a una ubicación es­pe­ci­fi­ca­da por el usuario. Para ello, hay dos datos es­pe­cia­l­me­n­te im­po­r­ta­n­tes: el nombre del archivo y el lugar de destino de la operación. La sintaxis del comando CP está es­tru­c­tu­ra­da de la siguiente manera:

cp [Origen] [Destino]

Para usar el comando CP, ve al di­re­c­to­rio del archivo que quieras copiar e introduce en el comando el nombre del archivo y la ruta en la que quieres que se guarde el nuevo archivo.

cp texto.txt /home/usuario/carpeta_de_destino/

En este ejemplo, creamos un nuevo archivo en la carpeta de destino que tiene el mismo nombre que el archivo de origen. Si quieres copiar varios archivos al mismo tiempo, es­crí­be­los uno detrás de otro dentro de la misma línea de comando.

cp texto1.txt texto2.txt texto3.txt /home/usuario/carpeta_de_destino/

En los ejemplos an­te­rio­res, siempre hemos dado a la copia el mismo nombre que el archivo de origen. Puedes darle el nombre que quieras al archivo nuevo in­tro­du­cié­n­do­lo en el parámetro de destino:

cp texto.txt /home/usuario/carpeta_de_destino/texto_copia.txt

Si no indicas la ruta de la carpeta de destino, la copia se crea con un nuevo nombre en la misma carpeta que el archivo original.

cp texto1.txt texto2.txt

Funciones es­pe­cia­les del comando CP

El comando CP de Linux también puede realizar otras tareas. Para ello, al comando se le puede añadir un término que contenga un parámetro:

cp [Parámetro(s)] [Origen(es)] [Destino]

Puedes in­tro­du­cir los si­guie­n­tes pa­rá­me­tros (flags) en el campo para que el trabajo de copia sea más complejo o más fácil.

Pa­rá­me­tros De­s­cri­p­ción Ejemplo
-a Copia el archivo con la misma co­n­fi­gu­ra­ción de permisos y metadatos que el original. cp -a texto.txt /home/usuario/carpeta_de_destino/
--archive Copia el archivo con la misma co­n­fi­gu­ra­ción de permisos y metadatos que el original. cp --archive texto.txt /home/usuario/carpeta_de_destino/
-b Crea una copia en la memoria in­te­r­me­dia (también llamada buffer) si el archivo original y el destino tienen el mismo nombre, pero diferente contenido. cp -b texto.txt /home/usuario/carpeta_de_destino/
--backup Crea una copia en la memoria in­te­r­me­dia (también llamada buffer) si el archivo original y el destino tienen el mismo nombre, pero diferente contenido. cp --backup texto.txt /home/usuario/carpeta_de_destino/
--backup=numbered Crea un nuevo archivo numerado si el archivo original y el de destino tienen el mismo nombre de archivo, pero diferente contenido. cp --backup==numbered texto.txt /home/usuario/carpeta_de_destino/
--backup=existing Crea un nuevo archivo numerado si el archivo original y el de destino tienen el mismo nombre de archivo, pero diferente contenido - y ya existen copias de seguridad numeradas. cp --backup==existing texto.txt /home/usuario/carpeta_de_destino/
-d Copia los enlaces si­m­bó­li­cos. cp -d texto.txt /home/usuario/carpeta_de_destino/
-f Obliga a so­bre­s­cri­bir al copiar. cp -f texto.txt /home/usuario/carpeta_de_destino/texto.txt
--force Obliga a so­bre­s­cri­bir al copiar. cp --force texto.txt /home/usuario/carpeta_de_destino/texto.txt
-i Pide permiso antes de so­bre­s­cri­bir archivos con el mismo nombre. cp -i texto.txt /home/usuario/carpeta_de_destino/
--in­ter­ac­ti­ve Pide permiso antes de so­bre­s­cri­bir archivos con el mismo nombre. cp --in­ter­ac­ti­ve texto.txt /home/usuario/carpeta_de_destino/
-l Crea un enlace duro en lugar de una copia. cp -l texto.txt /home/usuario/carpeta_de_destino/
--link Crea un enlace duro en lugar de una copia. cp --link texto.txt /home/usuario/carpeta_de_destino/
-n Los archivos exi­s­te­n­tes nunca se so­bre­s­cri­bi­rán. cp -n texto.txt /home/usuario/carpeta_de_destino/
--no-cobbler Los archivos exi­s­te­n­tes nunca se so­bre­s­cri­bi­rán. cp –no-cobbler texto.txt /home/usuario/carpeta_de_destino/
-p Los atributos del archivo original se heredan al copiar. cp -p texto.txt texto1.txt
--preserve Los atributos del archivo original se heredan al copiar. cp --preserve texto.txt texto1.txt
--preserve=mode El modo del archivo original se hereda al copiar. cp --preserve==mode texto.txt texto1.txt
--preserve=ownership Las pro­pie­da­des del archivo original se heredan al copiar. cp --preserve==ownership texto.txt texto1.txt
--preserve=timestamp La marca de tiempo del archivo original se hereda al copiar. cp --preserve==timestamp texto.txt texto1.txt
--preserve=links Los enlaces del archivo original se heredan al copiar. cp --preserve==links texto.txt texto1.txt
--preserve=context El contexto de seguridad del archivo original se hereda al copiar. cp --preserve==context texto.txt texto1.txt
--preserve=xattr Los atributos ex­te­n­di­dos del archivo original se heredan al copiar. cp --preserve==xattr texto.txt texto1.txt
--preserve=all Todos los atributos del archivo original se heredan al copiar. cp --preserve==all texto.txt texto1.txt
-P Los enlaces si­m­bó­li­cos se guardan como tales al copiar. cp -P texto.txt /home/usuario/carpeta_de_destino/
--no-de­re­fe­re­n­ce Los enlaces si­m­bó­li­cos se guardan como tales al copiar. cp --no-de­re­fe­re­n­ce texto.txt /home/usuario/capeta_de_destino/
-r Los di­re­c­to­rios, incluidos los su­b­di­re­c­to­rios, se copian de forma recursiva. cp -r /home/usuario/carpeta_de_origen/ /home/usuario/carpeta_de_destino/
-R Los di­re­c­to­rios, incluidos los su­b­di­re­c­to­rios, se copian de forma recursiva. cp -R /home/usuario/carpeta_de_origen/ /home/usuario/carpeta_de_destino/
--recursive Los di­re­c­to­rios, incluidos los su­b­di­re­c­to­rios, se copian de forma recursiva. cp --recursive /home/usuario/carpeta_de_origen/ /home/usuario/carpeta_de_destino/
-s Crea un enlace simbólico para el archivo original. cp -s texto.txt /home/usuario/carpeta_de_destino/
--symbolic-link Crea un enlace simbólico para el archivo original. cp --symbolic-link texto.txt /home/usuario/carpeta_de_destino/
-S So­bre­s­cri­be un sufijo de backup al copiar con --backup. cp --backup=simple -S texto.txt /home/usuario/carpeta_de_destino/
--suffix=own_suffix So­bre­s­cri­be con su propio sufijo el sufijo de backup al copiar con --backup. cp --backup=simple –suffix=own_suffix texto.txt /home/usuario/carpeta_de_destino/
-u Copia el archivo solamente si el archivo de destino es más antiguo que el original. cp -u texto.txt /home/usuario/carpeta_de_destino/texto.txt
--update Copia el archivo solamente si el archivo de destino es más antiguo que el original. cp --update texto.txt /home/usuario/carpeta_de_destino/texto.txt
-v Emite un mensaje al terminar la copia. cp -v texto.txt texto1.txt
--verbose Emite un mensaje al terminar la copia. cp --verbose texto.txt texto1.txt
Consejo

También puedes combinar varios pa­rá­me­tros entre sí. Para ello, si­m­ple­me­n­te escribe los pa­rá­me­tros separados por un espacio al principio del comando.

Ejemplos para el uso de CP

A partir del gran número de pa­rá­me­tros di­s­po­ni­bles para el comando copy se deduce que el comando CP en Linux puede uti­li­zar­se para más que si­m­ple­me­n­te copiar archivos y carpetas. Co­m­bi­na­n­do los distintos pa­rá­me­tros, se pueden abordar tareas mucho más complejas. Los si­guie­n­tes tres ejemplos reflejan es­ce­na­rios de apli­ca­ción típicos en la vida cotidiana de un usuario de Linux.

Backup numerado

Su­po­n­ga­mos que estás tra­ba­ja­n­do en un archivo y quieres crear un backup del mismo de forma más o menos regular. Para que también puedas hacer un se­gui­mie­n­to de los cambios y po­si­ble­me­n­te volver a un estado anterior, se crean archivos in­di­vi­dua­les. Para ello uti­li­za­mos la opción de backup ampliado.

cp -f -v --backup=numbered texto.txt texto.txt

Creamos este backup con el mismo nombre de archivo y también en la misma carpeta. Para que esto sea posible, uti­li­za­mos el parámetro “forzar”. Como también hemos activado el parámetro “numerado”, se crean nuevos archivos con nombres numerados. Gracias a “verbose”, recibirás una no­ti­fi­ca­ción después de cada operación de copia.

En la consola aparece de esta manera:

~$ cp -v -f --backup=numbered texto.txt texto.txt
'texto.txt' -> 'texto.txt.~1~'
~$ cp -v -f --backup=numbered texto.txt texto.txt
'texto.txt' -> 'texto.txt.~2~'
~$ cp -v -f --backup=numbered texto.txt texto.txt
'texto.txt' -> 'texto.txt.~3~'
~$ ls
texto.txt  texto.txt.~1~  texto.txt.~2~  texto.txt.~3~
Consejo

En Linux, puedes utilizar el comando ls para mostrar la lista de los archivos y su­b­ca­r­pe­tas que hay dentro de la carpeta que quieras.

Cla­si­fi­ca­ción de archivos con wildcards

Tienes una carpeta llena de di­fe­re­n­tes archivos: las imágenes, apli­ca­cio­nes y los do­cu­me­n­tos están mezclados entre sí. Su­po­n­ga­mos que quieres copiar todas las imágenes a una carpeta diferente. En lugar de in­tro­du­cir una a una todas las imágenes en el comando, puedes trabajar con el asterisco (*), que sirve de wildcard. En nuestro ejemplo, su­s­ti­tui­mos el nombre completo del archivo por un asterisco y solo in­tro­du­ci­mos las ex­te­n­sio­nes de los archivos.

cp *.jpg *.png /home/usuario/imágenes

Con este comando copiarás todos los archivos con las ex­te­n­sio­nes JPG y PNG a la carpeta de imágenes. Todos los demás archivos serán ignorados. Los archivos ori­gi­na­les se conservan, ya que con el comando CP solo se copian los datos, no se mueven.

Copia de di­re­c­to­rios

La copia recursiva incluye a una carpeta y todas sus su­b­ca­r­pe­tas. Por lo tanto, la es­tru­c­tu­ra del di­re­c­to­rio se copia entera. Esto no funciona con la copia sencilla del comando CP: si intentas copiar una carpeta sin el parámetro co­rre­s­po­n­die­n­te, te saldrá un mensaje de error. El parámetro que debes usar es el '-r', también conocido como '--re­cu­r­si­vo' o '-R'.

En nuestro ejemplo, queremos crear re­gu­la­r­me­n­te una copia de seguridad de una carpeta, in­clu­ye­n­do su contenido y su­b­ca­r­pe­tas. Para que no haya que copiar siempre todo el contenido del di­re­c­to­rio, puedes utilizar el parámetro “update”.

cp -r -u /home/usuario/original/ /home/usuario/backups/

Cuando ejecutes el comando por primera vez, se te creará el di­re­c­to­rio “original” dentro de la carpeta de backups. Todos los archivos y su­b­di­re­c­to­rios se te copiarán dentro de él. Si se trata de grandes ca­n­ti­da­des de datos, esto puede llevar algún tiempo. Si utilizas el parámetro '-u', solo copiarás los elementos mo­di­fi­ca­dos po­s­te­rio­r­me­n­te.

Al­te­r­na­ti­vas al comando CP de Linux

A pesar de los numerosos pa­rá­me­tros que ofrece el comando CP, solo puede uti­li­zar­se de forma re­la­ti­va­me­n­te limitada. Por ejemplo, si quieres crear una copia y luego borrar el original, tienes que usar el parámetro MV (move). Con este comando también se introduce la ruta de origen y la ruta de destino.

El comando DD es algo más so­fi­s­ti­ca­do que el CP. Con este comando, también tienes la opción de cambiar el formato de los archivos durante el proceso de copia. Para ello, el proceso se lleva a cabo bit a bit. El comando es útil, por ejemplo, si quieres copiar discos duros o pa­r­ti­cio­nes completas.

El comando PYCP de Linux también es in­te­re­sa­n­te. Con él, obtienes una vi­sua­li­za­ción gráfica durante el proceso de copia. Sin embargo, para ello necesitas Python 3.5 (o una versión más reciente). En las nuevas versiones de Ubuntu, el lenguaje de pro­gra­ma­ción está prei­n­s­ta­la­do por defecto.

El comando SCP de Linux también puede ser útil. Con Secure Copy puedes tra­n­s­fe­rir datos de tu ordenador a otro o viceversa. Esto se hace a través del protocolo SSH que, por tanto, es un proceso en­cri­p­ta­do.

En resumen

Con Linux-CP puedes copiar archivos y carpetas de forma rápida y re­la­ti­va­me­n­te fácil. Mediante los múltiples pa­rá­me­tros di­s­po­ni­bles, puedes realizar tareas incluso más complejas. Para llevar a cabo tareas co­ti­dia­nas, también puedes utilizar la técnica de Shell Scripting. Esta técnica te permite, por ejemplo, crear un script para hacer una copia de seguridad semanal.

Para el uso diario de un terminal de Linux, debes conocer otros comandos. Por ejemplo, para si­m­pli­fi­car el flujo de trabajo te re­co­me­n­da­mos conocer estos comandos:

Ir al menú principal