cp con barra de progreso

¿Quieres que al copiar con cp un fichero enorme (una imagen .iso por ejemplo) de una carpeta a otra (situadas en distintos discos, para hacer más divertido el asunto) se vea una barra de progreso tal y como sucede al usar wget?

Es decir, ¿quieres conseguir algo así?

% cp_p /mnt/raid/pub/iso/debian/debian-2.2r4potato-i386-netinst.iso /dev/null
 76% [===========================================>                    ]

Bien, pues en este blog han publicado un shell script de unas 20 líneas para hacer justo eso. Crazy.

8 comentarios en «cp con barra de progreso»

  1. Seguramente sea fallo mio, pero en Fedora 8, he probado a hacerlo ejecutable (chmod +x) y ninguno de estos metodos me funciona:
    $ cp_p `origen` `destino`
    $ sh cp_p `origen` `destino`

    $ sh cp_p.sh `origen` `destino`

    He probado incluso a incluir la función en ~/.bashrc y tampoco da resultado. Simplemente no hace nada. Alguna idea para un newbie?

  2. Prueba a meter el cp_p en /usr/bin/ y comenta la cabecera de la función son sus llaves con #.

    Para ejecutarlo: $ cp_p `origen` `destino`

  3. Eskerrik asko.

    Ia lo he conseguido hacer funcionar. En mi caso cada X tiempo crea una linea nueva con la información del progreso y la verdad no resulta muy comodo su uso, pero como ejercicio tecnico, «it’s crazy» :-).

  4. A mi particularmente me funciona cuando lo pongo dentro del ~/.bashrc y desde consola (Ctrl+Alt+F1) se actualiza en la misma línea pero en una terminal ordinaria (gnome-terminal, Terminal, xterm, etc.) no me funciona, me imprime una nueva línea con cada por ciento que avanza. Alguna solución ?

  5. Genial el script. Después de horas i horas he conseguido hacerlo funcionar. Soy bastante nuevo en ubuntu y de programacion no tengo ni idea.

    Me preguntaba si alguien sabria responderme estas dudas…

    1- cp_ p funcionaria con mas de un archivo a la vez?
    2- podria funcionar con directorios de modo recursivo?
    3- Alguien sabria adaptarlo para hacer lo mismo con el comando mv? ^^

    Por cierto, no sé exactamente como lo habré hecho però a mi el problema de imprimir los % en diferentes líneas no me ha ocurrido…

    Salut!

  6. Dàrent, Yo no lo he conseguido hacer funcionar pero supongo que para hacerlo con mv bastaría hacer lo mismo que has hecho con este script.

    Quizás sea bueno decir cómo lo hiciste funcionar.

    Un saludo

    #!/bin/sh
    mv_p()
    {
    strace -q -ewrite mv — «${1}» «${2}» 2>&1
    | awk ‘{
    count += $NF
    if (count % 10 == 0) {
    percent = count / total_size * 100
    printf «%3d%% [«, percent
    for (i=0;i»
    for (i=percent;i<100;i++)
    printf " "
    printf "]r"
    }
    }
    END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
    }

  7. Aupa,

    Para el siguiente que aterrice por aquí y no entienda las explicaciones de arriba.

    Las lineas del script con el nombre (cp_p()) y las que encierran todo el script entre llaves (la llave del principio { y la del final }) no sirven para nada, y es por eso que hay que comentarlas, poniendo un # por delante.

    Con respecto al tema de que escriba una nueva linea por cada actualizacion, esto sucede porque la linea de progreso que se pretende mostrar por pantalla tiene más caracteres que la consola; prueba a hacer más ancha la consola hasta que toda la línea quepa bien y verás que el comportamiento es el deseado (se sobrescribe la linea de manera que ahora ya sí se ve una barra de progreso). Este comportamiento sucede también con aplicaciones como avimerge cuando los nombres de fichero de origen y destino son muy largos.

    Hala, geroarte. Ondo segi,

    tor

Responder a Julio Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.