Cuando copiamos archivos por terminal usamos el ya más que conocido comando cp pero desde mi punto de vista tiene un pequeño inconveniente cuando copiamos archivos de gran tamaño y es que el terminal no muestra el progreso de la copia y puede dar la sensación de que el proceso se ha quedado zombi.

Es posible ver una barra de progreso junto con otros datos como el tiempo que le falta para terminar de copiar el archivo o el tamaño total del archivo utilizando rsync, gcp o pv. Cualquiera de estas tres opciones es válida para mostrar una barra de progreso al copiar archivos.

rsync

Rsync es un programa para sincronizar archivos y directorios entre dos equipos de la red o como en nuestro caso, entre dos ubicaciones del propio ordenador. El comando se debe usar con las siguientes opciones para ver el progreso de la copia:

[user@host ~]$ rsync -pogr --progress origen destino

O una opción equivalente mucho más corta y fácil de recordar:

[user@host ~]$ rsync -P origen destino

Para copiar directorios añadimos la opción -r.

[user@host ~]$ rsync -P -r carpeta-origen carpeta-destino

Con rsync realmente no se muestra una barra de progreso pero si que muestra la cantidad de datos copiados, el porcentaje que lleva, la velocidad de transferencia y el tiempo estimado para terminar la copia.

gcp

Gcp es otro programa para copiar archivos similar a cp pero con algunas características diferentes entre la que se encuentra la que nos interesa, que es mostrar una barra de progreso. El uso más simple es igual que cp.

[user@host ~]$ cp origen destino

Y para copiar carpetas usamos la opción -r.

[user@host ~]$ gcp -r carpeta-origen carpeta-destino

pv

El programa pv (siglas de pipe viewer) sirve para mostrar información sobre la transferencia de datos a través de una tubería. La información que se muestra es más o menos la misma que con gcp: porcentaje, barra de progreso, tiempo para terminar y velocidad de transferencia.

El uso de este comando sin embargo es diferente a los anteriores y a cp, tenemos que usar una redirección. Además tenemos el inconveniente de que con pv no se pueden copiar carpetas ni se pueden copiar varios orígenes a un destino, tiene que ser un archivo a un destino.

[user@host ~]$ pv origen > destino

Usar un alias para cp

En el archivo .bashrc del directorio home podemos añadir un alias para usar rsync o gcp cuando escribamos cp en el terminal.

Si usas rsync sería:

alias cp='rsync -P'

Con gcp:

alias cp='gcp'

En el caso de que uses pv es más cómodo crear una función que un alias para poder mantener la sintaxis del comando. La función sería de la siguiente forma:

cp(){
  pv "$1" > "$2"
}