Comando cp de Linux. Un par de trucos útiles

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.

——————————-

10 pensamientos en “Comando cp de Linux. Un par de trucos útiles

  1. Buenas! Cuánto tiempo hacía que no entraba por aquí… He estado bastante alejado de la blogosfera estos meses (desde que empecé a trabajar). A ver si me animo y escribo algo en el mío. Yo en general, desde que descubrí y aprendí a utilizar bien rsync, apenas he vuelto a tocar cp, salvo para cosas muy puntuales. Sobre todo para copiar archivos de un servidor a otro es muchísimo más rápido.

    Un saludo,
    Iyán

  2. Interesante opción [cp –force –backup=numbered] sobre todo cuando programas y tienes que respaldar el archivo que modificaste.

    Yo normalmente lo hago con el [cp Clase1.java Clase1.java.BAK].

    Acabo de crear un Alias para usarlo con este fin:
    alias cpbk=’cp –force –backup=numbered’

    Gracias por el aporte!.

  3. Gracias un Excelente Articulo como siempre y un gran comando.

    cp ‘shining brain of genius victorhck’ ‘to me’

    Saludos

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s