El comando cp en GNU/Linux sirve para copiar un archivo o carpeta trabajando en la línea de comandos. Pero esconde muchas opciones.



La línea de comandos en GNU/Linux esconde un montón de opciones y de utilidades que una vez conocidas resultan ser de lo más útiles y potentes, quizás más que muchas utilidades con una interfaz gráfica.

Veamos en este artículo un par de trucos sencillos que nos pueden ser de utilidad utilizando el comando cp (que viene de copy) y que como se puede adivinar este comando sirve para copiar archivos o carpetas de una hubicación en otra.

Este artículo es una adaptación de un artículo en inglés publicado en opensource.com bajo licencia CC BY-SA 4.0 escrito por Chris Hermansen, que puedes leer en este enlace:

La forma más sencilla y habitual de utilizar el comando cp es de la siguiente:

cp fichero1 fichero2

Esto lo que hace es copiar el archivo1 en archivo2, también podemos especificar una ruta distinta donde queremos que hubique el fichero2. Si este fichero no existían antes de ejecutar el comando, se crea el fichero. Si ya existía, entonces se sobreescribe.

Pero tal como he dicho al principio vamos a ver un par de trucos que podemos utilizar desde la terminal con el comando cp.

1.- Actualizar una segunda copia de una carpeta

Imaginemos que tenemos una carpeta en nuestro sistema que contiene una serie de archivos. Para este ejemplo imaginemos que es una carpeta donde vamos descargando las fotos de nuestro móvil (pueden ser archivos de texto, hojas de cálculo, etc)

Y de esta carpeta de vez en cuando también hacemos una copia de seguridad en otra partición de Datos que tenemos en otro disco duro. Para ello ejecutamos el siguiente comando cp con algunas opciones.

victorhck @Geeko :~ /Imagenes$ cp -r Fotos_movil / run/media/Datos

El comando copia la carpeta Fotos_movil que está en la carpeta Imagenes dentro de mi /home y todo su contenido (la opción -r o “recursive” indica que debe copiar la carpeta y el contenido de la misma) dentro de la ruta /run/media/Datos que es donde mi partición está montada.

Ahora supongamos que otro día añado más fotos a la carpeta de /home/victorhck/Imagenes/Fotos_movil y para tenerlas a buen recaudo también quiero guardarlas en mi partición de respaldo dentro de Datos.

Para ello ejecutaré el siguiente comando:

victorhck @Geeko :~ /Imagenes> cp -r -u -v Fotos_movil / run/media/Datos

A la opción ya conocida de -r para que copie la carpeta Fotos_movil y todo el contenido de la misma, hemos añadido la opción -u (“update“) para que actualice el contenido en la carpeta destino y sólo copie aquellas fotos o datos que no estuvieran ya en el destino. Y con la opción -v (“verbose“) el comando muestra en pantalla las tareas que va realizando.

También se pueden escribir las opciones del comando como:

cp -ruv Fotos_movil / run/media/Datos

Es decir, el comando comprueba que ficheros existen en la fuente, que no están en el destino, y esos son los que copia. También aquellos que exiten pero que en el origen están modificados y son distintos del archivo que existe en el destino. ¡El comando hace todo eso!

2.- Hacer distintas versiones de copias de seguridad

Para nuestro ejemplo imaginemos que estamos trabajando en un archivo llamado texto.md y lo estamos modificando, pero queremos tener una copia de seguridad o backup, de los distintos archivos antes de ir modificándolos, es aquí cuando el comando cp hace su magia.

cp --force --backup =numbered texto.md texto.md

En el comando lo que hacemos es copiar el mismo archivo encima de sí mismo. Esto con el comando cp no se puede hacer, pero en este caso especial queremos que sea así por tanto forzamos al comando que lo haga con la opción –force

La opción –backup=numbered le dice al comando que quiero hacer un backup del archivo indicado, y que las sucesivas copias de seguridad que haga quiero que estén numeradas consecutivamente. La primera será la 1, la segunda la 2, etc…

Ahora modificamos nuestro archivo texto.md una vez guardado volvemos a ejecutar el comando anterior para tener un nuevo archivo de respaldo. Si listamos los archivos que tenemos en nuestro equipo con el comando ls veremos que tenemos algo similar a esto:

texto.md texto.md.~1~ texto.md.~2~

Podemos comparar las diferencias con el comando diff de los archivos de respaldo numerados que hemos realizado para ver los cambios.

Espero que este par de comandos te sean útiles. Como siempre animaros a probarlos, hacer vuestras propias pruebas, y a echar un vistazo a la página man del comando donde seguro que encontraréis más opciones interesantes que os pueden ser útiles.

——————————-