¿Por qué cp no tiene una barra de progreso como wget?

55

Tenga en cuenta que no pregunto cómo . Ya conozco opciones como pvy rsync -P.

Quiero preguntar por qué no cpimplementa una barra de progreso, al menos como una bandera.

Lamnk
fuente
77
¿Qué tal "El autor no siente la necesidad de ello"?
phunehehe
77
Para los lectores que no conocen pvy rsync -P, consulte los archivos de traslado con barra de progreso ( una de las respuestas cita un parche a cpfin de que cp -gda un indicador de progreso).
Gilles 'SO- deja de ser malvado'
2
Un mejor lugar para preguntar sería en la nueva (desde 2010) lista de correo de usuarios de coreutils.
Faheem Mitha

Respuestas:

57

La tradición en las herramientas de Unix es mostrar mensajes solo si algo sale mal. Creo que esto es tanto por diseño como por razones prácticas. El diseño tiene la intención de hacer que sea obvio cuando algo sale mal: se obtiene un mensaje de error y no se ahoga en mensajes no informativos. La razón práctica es que en los primeros días de Unix, todavía había teleimpresoras ; es decir, la salida de los programas se imprimiría en papel, y no desea imprimir barras de progreso.

Cualquiera sea la razón, la tradición de mostrar solo mensajes útiles se ha quedado en el mundo de Unix. Las herramientas modernas a veces han introducido barras de progreso; En el caso de rsync, la motivación principal es que rsync a menudo se realiza a través de la red, y las redes son mucho más flexibles que los discos locales, por lo que la barra de progreso es más útil. El mismo razonamiento se aplica a wget.

Gilles 'SO- deja de ser malvado'
fuente
66
Esta. Y cpse remonta a principios de la década de 1970: es lo más tradicional posible.
dmckee
3
@dmckee Entonces, ¿por qué puede dddar declaraciones de progreso? ddse remonta a 1966 (OS / 360). Las herramientas de Unix pueden ser detalladas si el usuario quiere que sean detalladas, pero desafortunadamente no puede decir cuán detallado será cp (solo hay un nivel de verbosidad adicional:) -v.
taffer
77
@taffer ddes peculiar en muchos aspectos (más obviamente, su sintaxis de opción) porque no es de Unix, es un clon de una herramienta de IBM. Además, se usaba principalmente para tareas largas en cintas, por lo que sus mensajes le decían que regresara de su descanso, a diferencia de cpdonde en la mayoría de los casos simplemente parpadeaba y recuperaba su mensaje.
Gilles 'SO- deja de ser malvado'
16

En el mundo de Unix, cada herramienta está diseñada para hacer un trabajo y hacerlo bien. ¿Por qué debería cppreocuparme por generar progreso cuando pvya existe otra herramienta como esta? En la misma línea, ¿por qué tantos programas descargan cosas en la pantalla sin paginación? Porque ya hay herramientas para ese trabajo como more(o less). ¿Por qué la mayoría de los programas que requieren la edición de archivos NO le presentan un editor y en su lugar lo externalizan $EDITOR? Porque eso deja a todos haciendo la única tarea para la que fueron diseñados, y el usuario usa su editor favorito para todas las tareas.

Tangencialmente, la mayoría de los programas de shell están diseñados para que su salida se canalice a otros programas de shell. El único resultado que probablemente den es cosas que serían útiles para analizar en el siguiente comando de la cadena. Programas como cpse usan en scripts, así como manualmente desde una terminal, por lo que su salida se centra en el código de salida y las listas de archivos que fallaron o tuvieron éxito.

Siempre espere combinar herramientas para lograr el efecto deseado.

Caleb
fuente
3
¿ pvExistió cuando cpfue escrito? Es un buen punto, pero tengo la sensación de que, en este caso, cporiginalmente se escribió deliberadamente sin salida de progreso, nada que ver con otras herramientas, solo las otras razones que usted y Gilles citan.
Cascabel
1
@Jefromi: No estoy seguro de que importe. Esta no es una pregunta histórica sobre por qué cpera unidireccional cuando se codificó por primera vez. La pregunta es por qué es así ahora . Han pasado muchos años y alguien podría haber agregado la funcionalidad, pero claramente ha decidido no hacerlo. Estoy seguro de que la disponibilidad de otras herramientas influye en esa decisión.
Caleb
3

Esta es una de esas cosas marginales donde hay argumentos a favor y en contra de agregar una opción de barra de progreso a cp. El argumento principal en contra es que es posible que no sepa con anticipación que desea conocer el progreso. Ctrl-T / SIGINFO está disponible en BSD para este propósito, y si eso está disponible en plataformas GNU / Linux, entonces podría haber más razones para que active la lógica de la barra de progreso en cp. Mientras tanto, una solución más general es utilizar una herramienta separada como el Visor de progreso de Coreutils ( progressanteriormente conocido como cv) para mostrar el estado de cualquier proceso en el sistema.

Pádraig Brady
fuente