Ikasten.IO
Learning, Aprendiendo

cp con barra de progreso 26 enero, 2008

¿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í?

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

  • jong dice:

    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?

  • TakeDown dice:

    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

  • TakeDown dice:

    >..la cabecera de la función son sus llaves con #.

    ..la cabecera de la función Con sus llaves usando #.

    Barkatu hutsegitea

  • jong dice:

    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” :-).

  • Jorge Luis dice:

    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 ?

  • Dàrent dice:

    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!

  • Julio dice:

    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
    }

  • tor dice:

    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

Deja un comentario

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