Guía de tecnologías

Mostrar progreso al copiar archivos en Linux con pv y progress

9 min read Linux Actualizado 07 Oct 2025
Progreso al copiar archivos en Linux: pv vs progress
Progreso al copiar archivos en Linux: pv vs progress

Introducción

Imagina que empiezas a copiar un archivo muy grande desde una memoria USB a tu sistema Linux usando la línea de comandos. El proceso tardará, así que haces otras tareas. Vuelves más tarde y el comando sigue en ejecución; no ha terminado y no muestra errores. ¿Qué haces? Muchas veces solo esperar o cancelar (Ctrl+C) y volver a intentarlo.

Una solución mucho más cómoda es ver una barra de progreso o una estimación del tiempo restante en la terminal, como ocurre en interfaces gráficas. Este artículo explica dos utilidades de línea de comandos que añaden esa visibilidad: pv y progress.

Nota: los ejemplos y comandos se probaron en Ubuntu 14.04, pero las herramientas funcionan en muchas distribuciones. Asegúrate de adaptar los comandos de instalación a tu distribución.

Qué hace cada herramienta — Resumen rápido

  • pv: inserta una monitorización de flujo en una tubería (pipe). Muestra tiempo transcurrido, porcentaje, velocidad, total transferido y ETA. Requiere que cambies la forma en que ejecutas la operación (p. ej. usar tuberías).
  • progress: detecta y muestra el progreso de operaciones ya en curso realizadas por comandos de coreutils (cp, mv, dd, tar, gzip, cat, etc.). No necesitas reemitir el comando que quieres monitorizar.

Instalación mínima en Debian/Ubuntu

Para pv:

sudo apt-get install pv

Para progress (dependencias y compilación desde la fuente):

sudo apt-get install libncurses5-dev git build-essential
git clone https://github.com/Xfennec/progress.git
cd progress
make
sudo make install

Notas: si tu sistema tiene otra herramienta de gestión de paquetes (dnf, yum, pacman, zypper, brew), busca los paquetes equivalentes (pv suele estar en los repos oficiales). Para progress puedes compilar desde la fuente si no existe un paquete precompilado.

pv: uso y ejemplos

Definición breve: pv (pipe viewer) muestra el flujo de datos a través de una tubería y escribe progreso en stderr mientras pasa los datos de stdin a stdout.

Cómo usarlo: inserta pv entre dos procesos conectados por una tubería.

Ejemplo práctico — comprimir un conjunto de imágenes y escribir el .gz en el escritorio:

pv -p /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz

Explicación:

  • pv recibe los archivos desde stdin (la expansión del glob) y muestra el progreso.
  • gzip lee desde stdin y produce la salida comprimida que redirigimos al archivo final.

Ajustes útiles de pv:

  • Mostrar sólo la barra de progreso:
pv -p ... | gzip > out.gz
  • Esperar hasta que se transfiera el primer byte antes de mostrar estadísticas (útil si el proceso destino tarda en iniciarse):
pv -W ... | gzip > out.gz
  • Limitar la velocidad de transferencia (throttling) a 5 MB/s:
pv -L 5m ... | gzip > out.gz

La opción -L acepta sufijos: k, m, g, t correspondiendo a kilobytes, megabytes, gigabytes, terabytes (multiplicadores de 1024).

Cuándo usar pv:

  • Cuando puedas reescribir el comando para usar una tubería.
  • Cuando quieras estadísticas en tiempo real integradas en la cadena de procesos.

Limitaciones de pv:

  • No puede «ver» un proceso que ya se ejecuta sin que haya sido iniciado a través de su tubería.

progress: uso y ejemplos

Definición breve: progress detecta y muestra el progreso de operaciones de archivos realizadas por comandos comunes (coreutils). Puede estimar tiempo y tasa de transferencia y tiene un modo de monitorización similar a top.

Instalación y dependencias: progress depende de ncurses (para la interfaz); en Debian/Ubuntu instalas libncurses5-dev antes de compilar.

Uso básico — listar operaciones actuales

progress

Opciones destacadas:

  • -m, –monitor: hacer bucle mostrando procesos mientras sigan en ejecución.
  • -M, –monitor-continuously: monitorizar de forma continua (nunca termina, similar a watch).
  • -c, –command cmd: monitorizar solo procesos con ese nombre (puede repetirse).
  • -p, –pid id: monitorizar solo procesos por PID (puede repetirse).
  • -i, –ignore-file file: ignorar procesos por archivo (ruta absoluta requerida si el archivo no existe aún).

Ejemplo: monitorizar continuamente solo procesos dd y cp

progress -M -c dd -c cp

Ventaja principal: no necesitas relanzar o modificar el comando original. Progress «escanea» procesos en ejecución y extrae información sobre los archivos que manejan.

Limitaciones de progress:

  • Funciona mejor con operaciones basadas en coreutils (cp, dd, tar, gzip, gunzip, cat, mv y similares). No garantiza soporte para herramientas propietarias o procesos que implementen su propio manejo de E/S.

Comparativa práctica (matriz simple)

Característicapvprogress
Requiere modificar el comandoSí (usar tubería)No
Monitorización de procesos ya iniciadosNo
Estimación ETASí (cuando es posible)
Soporte para cualquier flujo de datosSí, si usas tuberíasLimitado a procesos detectables
InstalaciónPaquete oficial en reposFuente o paquete si disponible

Buenas prácticas y heurística rápida

  • Si vas a realizar la operación y puedes usar tuberías (p. ej. compresión, cifrado), usa pv: te da control y opciones de throttling.
  • Si la operación ya está en curso o proviene de un comando estándar (cp, dd), usa progress: no interrumpe ni obliga a reiniciar.
  • Para copias largas desde unidades externas, considera combinar pv con rsync o dd según el caso (rsync para sincronización, dd para imágenes bit a bit).

Heurística de selección (mental model):

  • Necesito reanudar o sincronizar múltiples archivos -> rsync.
  • Quiero ver progreso al comprimir/pipear datos -> pv.
  • Proceso ya en ejecución o uso de comandos coreutils -> progress.

Mini metodología: cómo integrar en tu flujo de trabajo

  1. Preparación: verificar si pv/progress están instalados.
  2. Elección: decidir si puedes modificar el comando (pv) o necesitas observar procesos (progress).
  3. Ejecución: lanzar la operación con pv o iniciar progress en modo monitor.
  4. Verificación: supervisar la ETA y la velocidad; si hay bloqueo, identificar I/O, CPU y uso de disco.
  5. Acción: ajustar prioridad (ionice/nice), limitar velocidad (-L), o rehacer con rsync si es necesaria reanudación.

Playbook: pasos rápidos para diagnosticar una copia «congelada» en la terminal

  1. Ejecuta top o htop para ver si el proceso consume CPU.
  2. Ejecuta iostat o vmstat (si disponibles) para comprobar actividad de disco y colas I/O.
  3. Si el proceso fue lanzado por ti y usa tubería, reaplica pv; ejemplo:
# Si antes hiciste: cat archivo > destino
# Mejor: pv archivo > destino
pv archivo > /ruta/destino
  1. Si el proceso está en ejecución y es cp/dd/tar, ejecuta progress para ver el progreso.
  2. Si el dispositivo de origen es USB lento, limita velocidad con pv -L para evitar saturar la cola de I/O.
  3. Si la operación no progresa y ocupa recursos, considera pausar/terminar y rehacer con rsync –partial –progress para reanudar.

Checklist por rol

  • Usuario final:

    • ¿Necesitas ver progreso ahora? Si sí, usar progress.
    • ¿Vas a reemitir el comando? Si sí y usas tubería, usa pv.
  • Administrador de sistemas:

    • Instalar pv en máquinas de trabajo en lote.
    • Instalar progress en servidores donde los usuarios ejecuten copias sin interacción.
    • Proveer alias útiles en el shell (ej.: cp -> pv | dd con cuidado).
  • DevOps/Automatización:

    • Incluir pv en scripts de backup para tener logs de transferencia.
    • Evitar usar pv en scripts que esperan salida exacta por stdout (redirigir stderr si es necesario).

Ejemplos reales y snippets útiles

Copiar un archivo grande con pv mostrando todo menos ETA si no interesa:

pv -q --progress --size $(stat -c%s archivo) archivo > /ruta/destino

Nota: -q suprime la salida no esencial; –size establece tamaño total si pv no lo detecta automáticamente.

Comprimir directorio con barra de progreso y límite de velocidad:

pv -p -L 5m /ruta/al/directorio/* | gzip > backup.tar.gz

Monitorizar procesos existentes (modo monitor continuo):

progress -M

Casos en que estas herramientas no ayudan (contrajemplos)

  • Procesos que realizan su propia lógica de E/S y no usan llamadas que puedan ser inspeccionadas por progress.
  • Transferencias sobre protocolos de red muy complejos donde no se expone fácilmente el tamaño total (p. ej. algunos clientes S3 especializados), salvo que se canalice mediante una tubería donde pv pueda colocarse.
  • Cuando la latencia no es por transferencia de bytes sino por bloqueo de archivos, permisos o locks a nivel de aplicación.

Mapa de decisión (Mermaid)

flowchart TD
  A[¿El proceso ya está en ejecución?] -->|Sí| B[¿Es comando coreutils 'cp, dd, tar'?]
  A -->|No| C[¿Puedes usar tuberías o reescribir el comando?]
  B -->|Sí| D[Usar progress]
  B -->|No| E[Considerar herramientas específicas o reescribir]
  C -->|Sí| F[Usar pv en la tubería]
  C -->|No| G[Usar progress si soportado o reprogramar]

Criterios de aceptación

  • Poder visualizar una barra de progreso o estimación de tiempo para la operación en ejecución.
  • No interrumpir la operación en curso simplemente para ver el progreso (a menos que debas reiniciarla).
  • Obtener suficientes datos (velocidad, bytes transferidos, ETA) para tomar una decisión (esperar, limitar o reiniciar).

Consideraciones de compatibilidad y migración

  • pv está disponible en la mayoría de repositorios de distribuciones Linux y es seguro incluirlo en imágenes base para servidores de backup.
  • progress puede no estar empaquetado en ciertas distribuciones: en esos casos compilar desde GitHub es una opción razonable.
  • Para entornos restrictivos (sin compilación), prioriza pv, porque suele llegar en paquetes precompilados.

Galería de casos límite

  • Transferencia sobre USB 2.0 muy lenta: incluso con progress o pv, la ETA puede oscilar mucho por variación en latencia; limitar velocidad con -L puede estabilizar.
  • Copias a través de NFS con bloqueo: progress puede mostrar actividad, pero la transferencia puede detenerse por el servidor; investigar logs del servidor NFS.
  • Operaciones cifradas en el camino (openssl, gpg): si usas tuberías puedes interponer pv; si no, progress puede no detectar correctamente el tamaño.

Glosario rápido (una línea cada término)

  • pv: utilidad que muestra el progreso de datos que atraviesan una tubería.
  • progress: monitor de procesos que intenta estimar progreso de comandos de manipulación de archivos.
  • ETA: tiempo estimado restante (estimated time of arrival).
  • Throttling: limitar la velocidad de transferencia para reducir carga.

Seguridad y privacidad

Estas herramientas leen metadatos de procesos y archivos para estimar progreso; no transmiten datos fuera del host. En entornos multiusuario, ejecutar progress puede revelar actividad de I/O de otros procesos presentes en el sistema; usa con cuidado en servidores compartidos.

Conclusión

pv y progress solucionan dos necesidades distintas: pv es ideal cuando puedes rediseñar el flujo con tuberías y quieres control fino (barra, límites de velocidad, estimaciones). progress es ideal para observar operaciones existentes realizadas con herramientas estándar sin reenviarlas. La elección depende del caso de uso: control y scripts → pv; observación y diagnóstico en vivo → progress.

Resumen: instala ambas herramientas si administras sistemas Linux frecuentemente. Te darán visibilidad en situaciones donde antes solo podías esperar o interrumpir procesos.

Recursos rápidos

Interfaz de progress mostrando múltiples operaciones en ejecución

Resumen final: pv para tuberías y control; progress para monitorización de procesos ya ejecutados. Practica con ambos para elegir el flujo que mejor encaje con tus scripts y operaciones de copia.

Autor
Edición

Materiales similares

Escaleras en espiral y círculos en Conan Exiles
Guía de juego

Escaleras en espiral y círculos en Conan Exiles

Ver Instagram en privado: métodos anónimos
Privacidad

Ver Instagram en privado: métodos anónimos

CSF en CentOS 7: instalación y guía completa
Seguridad

CSF en CentOS 7: instalación y guía completa

Solución: WhatsApp se reconecta en iPhone
Soporte técnico

Solución: WhatsApp se reconecta en iPhone

Mejorar la calidad de video en Windows
Tutorial Windows

Mejorar la calidad de video en Windows

Reparar fotos ligeramente borrosas
Edición de imagen

Reparar fotos ligeramente borrosas