En muchos casos, la cantidad de opciones que te ofrecen los comandos de Gnu/Linux te dan un control más preciso sobre operaciones en las que un interfaz gráfico no puede alcanzar con tanto detalle, el comando cp es un ejemplo de eso.

Para copiar un fichero, simplemente ejecuta el comando cp, seguido por el nombre del fichero existente, y luego el nombre del fichero que va a ser el destinatario de la copia.


Por ejemplo, para copiar un fichero llamado archivo1 hacia el nuevo fichero llamado archivo2, deberías teclear:

cp archivo1 archivo2

Al copiar archivos sin indicar ninguna opción no se copian los permisos, ni el propietario, ni cualquier otro atributo del archivo. Sólo se copia el archivo como podemos observar a continuación:









En muchos casos, esto es suficiente pero en otros seguramente prefiramos preservar algunos de estos atributos de los archivo que queramos copiar.

Por eso, si queremos mantener los permisos, el propietario y el grupo y las marcas de tiempo (timestamps) usaremos la opción -p.

Vamos a copiar el archivo archivo1 al archivo archivo3 con la opción -p.

cp -p archivo1 archivo3

Como podemos ver, ahora se han mantenido los mismos permisos y la misma hora en el archivo copiado, pero el nombre del usuario cambió.









En la mayoría de los sistemas operativos modernos, sólo los usuarios con los privilegios apropiados pueden cambiar el propietario de un archivo, por lo que tendremos que anteponer sudo al comando cp para mantener el propietario y el grupo si no son los nuestros, o deberás hacerlo como root.


sudo cp -p archivo1 archivo4


Y comprobamos que los resultados ya son los esperados.









También se puede utilizar cp para copiar un fichero a directorios diferentes, simplemente tecleando el nombre del directorio como destinatario del copiado.

Vamos a copiar el fichero avatar.jpg desde mi directorio personal hacia /tmp/pruebas, pero de forma que el fichero copiado tenga el mismo nombre que el fichero original. Podría hacerlo con el comando:

cp ~/avatar.jpg /tmp/pruebas

que crearía el fichero avatar.jpg como una copia del archivo que se encuentra en /home/alband/avatar.jpg







Al especificar las rutas completas del fichero origen y/o del destino, el comando cp puede copiar fichero hacia cualquier parte de tu sistema (siempre que tengas los permisos adecuados para ello, se entiende). Por ejemplo, para copiar el fichero avatar.jpg de mi directorio personal hacia el fichero avatar-nuevo.jpg del directorio /tmp/pruebas, podría ejecutar con éxito el siguiente comando independientemente de cuál fuera mi directorio actual.

cp ~/avatar.jpg /tmp/pruebas/avatar-nuevo.jpg









También se puede copiar directorios completos especificando la opción -r (recursivo). Para copiar un directorio datos-server y todo su contenido hacia un nuevo directorio llamado datos-server-respaldo:

cp -r datos-server datos-server-respaldo









Tardará más o menos dependiendo del número de ficheros que tengas en el directorio mis_datos. Cuando termine, el nuevo directorio contendrá una copia exacta de mis_datos.
Puedes añadir la opción -v (verboso) para mostrar cada uno de los pasos hechos durante la copia.

cp -rv ~/pdf /tmp/pruebas






Como era de esperar, el comando cp recursivo también copia recursivamente todos los subdirectorios y ficheros que contiene el objeto origen.











Otras opciones interesantes



Si queremos copiar un archivo y crear un backup del archivo existente usaremos la opcion -b


cp -b smb.conf ~/respaldos








También podemos usar el comando cp para copiar un archivo y ponerle la fecha correspondiente (útil para scripts de backup)


cp smb.conf smb.conf-$(date +%F)







Copiar a otro directorio solo los archivos modificados o nuevos.

cp -uva /origen/* /destino/


Verificamos la diferencia de archivos que hay entre los directorios, en uno cuatro archivos, y en el otro uno.








Procedemos a actualizar el directorio /tmp/pdf con el siguiente comando


cp -uva ~/pdf/* /tmp/pruebas/pdf/






Pero como observamos el archivo .oculto no se copió.






Repetimos el comando con una variación para que copie también archivos ocultos

cp -uva ~/pdf/. /tmp/pruebas/pdf/







Opciones usadas:

-u = no copiar si en el destino es mas reciente
-v = verboso, muestra el nombre de cada fichero
-a es igual a -dpR
-d = copiar enlaces simbolicos como tales y no el archivo real
-p = preservar permisos y tiempos
-R = copia directorios recursivamente









Para copiar un archivo con toda su estructura completa se logra con esta opción.


Verificamos que no hay nada en el directorio destino, y copiamos el archivo con toda su estructura

cp --parents /etc/samba/smb.conf /tmp/pruebas/








Y vemos los resultados

ls -R /tmp/pruebas











Crear un link con cp en vez de copiar los ficheros.


Para crear un enlace simbólico en vez de copiar los ficheros, usamos el comando


cp -s ~/pdf/* /tmp/pruebas/









Crear una imagen ISO de un CD/DVD

cp /dev/sr0 debian.iso

Y al cabo de unos minutos podemos ver el resultado

ls -l








Para conocer cual es la unidad de CD/DVD en tu sistema usar el comando


mount | grep "/dev/"







Para profundizar en el tema

man cp
info cp









Fuentes de conocimiento:

http://www.todosconsoftwarelibre.es/ejemplo-de-uso-del-comando-cp-en-linux/
http://bibliaubuntu.a.wiki-site.com/index.php/Copiando,_moviendo,_renombrando_y_borrando_archivos_y_directorios
http://sliceoflinux.wordpress.com/2010/07/15/copiar-archivos-manteniendo-los-permisos/
http://diariolinux.com/2011/02/25/asi-que-sabes-copiar-archivos-%C2%BFeh/
http://linuxcommando.blogspot.com/2007/11/use-of-parents-flag-in-mkdir-and-c.html
http://www.ecured.cu/index.php/Comando_cp
http://www.portalubuntu.com/2010/06/comandos-linux-cp-y-mv.html
http://manpages.ubuntu.com/manpages/gutsy/es/man1/cp.1.html



_____________________________________________________________________