Tenga en cuenta que no pregunto cómo . Ya conozco opciones como pv
y rsync -P
.
Quiero preguntar por qué no cp
implementa una barra de progreso, al menos como una bandera.
wget
cp
architecture
Lamnk
fuente
fuente
pv
yrsync -P
, consulte los archivos de traslado con barra de progreso ( una de las respuestas cita un parche acp
fin de quecp -g
da un indicador de progreso).Respuestas:
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.
fuente
cp
se remonta a principios de la década de 1970: es lo más tradicional posible.dd
dar declaraciones de progreso?dd
se 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
.dd
es 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 decp
donde en la mayoría de los casos simplemente parpadeaba y recuperaba su mensaje.En el mundo de Unix, cada herramienta está diseñada para hacer un trabajo y hacerlo bien. ¿Por qué debería
cp
preocuparme por generar progreso cuandopv
ya 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 comomore
(oless
). ¿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
cp
se 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.
fuente
pv
Existió cuandocp
fue escrito? Es un buen punto, pero tengo la sensación de que, en este caso,cp
originalmente se escribió deliberadamente sin salida de progreso, nada que ver con otras herramientas, solo las otras razones que usted y Gilles citan.cp
era 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.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 (
progress
anteriormente conocido comocv
) para mostrar el estado de cualquier proceso en el sistema.fuente