¿Terminal mostrará una barra de progreso cuando copio con "cp"?

33

¿Es posible mostrar una barra de progreso al copiar archivos en Terminal usando cp?

daviesgeek
fuente
2
… También podrías considerar usarlo en su rsynclugar.
Asmus
¿Hay alguna manera de hacer esto con una barra de progreso general sin instalar herramientas de terceros? Tal vez un guión o algo?
rraallvv

Respuestas:

49

Puede usar rsync en su lugar.

rsync --progress /copy/from /copy/to
bahamat
fuente
1
Speedwise, que es más rápido, rsync o cp?
daviesgeek
Si todos los archivos que se copian no existen en el destino, no creo que haya una diferencia notable. Si algunos de los archivos existen en el destino, variará porque rsync realiza algunas comprobaciones. Rsync generalmente (pero no siempre) será más rápido en ese caso.
bahamat
2
El uso rsync -P /copy/from /copy/toes equivalente al rsync --partial --progress /copy/from /copy/toque mostrará el progreso de la copia, así como reanudará la transferencia si está desconectada.
gh0st
Y al igual que cp, necesita la -rbandera para que no se salte directorios
Alexander - Restablezca a Monica
21

Durante cp, CtrlTmuestra el porcentaje actual (al menos en macOS)

Vamos
fuente
¡Eso es genial!
felix021
1
La razón por la que esto funciona es porque Ctrl-tenvía SIGINFOseñales de la misma manera que Ctrl-cenvía SIGINTseñales. Por ejemplo, puede usar un bucle en otro shell para repetir kill -INFOel proceso en cuestión si no desea seguir presionando las teclas. Debido a que es una señal, también funciona con otras utilidades, por ejemplo dd. Ctrl-ty SIGINFOse heredan de BSD.
HTNW
1

Si está copiando archivos o directorios grandes usando cp, puede abrir 'Monitor de actividad', ir a la pestaña 'Disco' y buscar el proceso 'cp'. Aquí puede realizar un seguimiento de cuántos bytes se han escrito desde el último arranque, lo que le da una idea aproximada del progreso. (OS X 10.10).

¡Espero que ayude!

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

No es perfecto, pero funciona ... colóquelo en una ruta de directorio y asígnele un nombre similar.

Essobi
fuente
Espera ... ¿cómo consigo que se ejecute?
daviesgeek
2
No recuerdo si OS X tenía un stracecomando en el momento en que se escribió esta respuesta (julio de 2011), pero definitivamente no lo tiene hoy.
Tim Ruddick
¿Alguna idea de cómo ejecutar esto en macOS?
rraallvv