Por que o cp não tem uma barra de progresso como o wget?

55

Por favor, note que eu não pergunto como . Eu já conheço opções como pve rsync -P.

Quero perguntar por que não cpimplementa uma barra de progresso, pelo menos como uma bandeira?

Lamnk
fonte
7
Que tal "O autor não sente necessidade disso"?
phunehehe
7
Para os leitores que não conhecem pve rsync -P, consulte mover arquivos com barra de progresso ( uma das respostas cita um patch para, cppara cp -gfornecer um indicador de progresso).
Gilles 'SO- stop be evil'
2
Um lugar melhor para perguntar seria na nova lista de discussão de usuários coreutils (desde 2010).
Faheem Mitha

Respostas:

57

A tradição nas ferramentas unix é exibir mensagens apenas se algo der errado. Eu acho que isso é tanto por motivos práticos quanto de design. O design visa tornar óbvio quando algo der errado: você recebe uma mensagem de erro e ela não é afogada em mensagens não realmente informativas. A razão prática é que, nos primeiros dias do unix, ainda havia tele-impressoras ; isto é, a saída dos programas seria impressa em papel e você não deseja imprimir barras de progresso.

Seja qual for o motivo, a tradição de exibir apenas mensagens úteis ficou no mundo unix. Ferramentas modernas às vezes introduziram barras de progresso; no caso do rsync, a principal motivação é que o rsync geralmente é realizado pela rede e as redes são muito mais esquisitas que os discos locais, portanto, a barra de progresso é mais útil. O mesmo raciocínio se aplica ao wget.

Gilles 'SO- parar de ser mau'
fonte
6
Este. E cpremonta ao início dos anos 70: é o mais tradicional possível.
dmckee
3
@dmckee Então, por que pode dddar declarações de progresso? ddremonta a 1966 (OS / 360). As ferramentas Unix podem ser detalhadas se o usuário quiser que elas sejam detalhadas, mas infelizmente você não pode dizer como a cp deve ser detalhada (existe apenas um nível adicional de detalhamento:) -v.
taffer
7
O @taffer ddé peculiar de várias maneiras (mais obviamente, sua sintaxe de opção) porque não é do unix, é um clone de uma ferramenta IBM. Além disso, ele era usado principalmente para tarefas longas em fitas, então suas mensagens diziam para você voltar do intervalo, ao contrário de cponde, na maioria dos casos, você apenas piscava e recuperava o prompt.
Gilles 'SO- stop be evil'
16

No mundo unix, cada ferramenta é projetada para fazer um trabalho e fazê-lo bem. Por que se cppreocupar com a saída do progresso quando outra ferramenta como pvessa já é usada? Na mesma linha, por que tantos programas despejam coisas na tela sem paginação? Porque já existem ferramentas para esse trabalho, como more(ou less). Por que a maioria dos programas que requerem edição de arquivos NÃO apresenta um editor e, em vez disso, terceiriza $EDITOR? Porque isso deixa todos executando a única tarefa para a qual foram projetados e o usuário usando seu editor favorito para todas as tarefas.

Tangencialmente, a maioria dos programas shell é projetada para ter sua saída canalizada para outros programas shell. A única saída que eles provavelmente fornecerão são coisas que seriam úteis para analisar no próximo comando da cadeia. Programas como cpsão usados ​​em scripts e também manualmente a partir de um terminal; portanto, sua saída é focada no código de saída e nas listas de arquivos que falharam ou foram bem-sucedidos.

Sempre espere combinar ferramentas para obter o efeito desejado.

Caleb
fonte
3
Existia pvquando cpfoi escrito? É um bom argumento, mas tenho a sensação de que, neste caso, cpfoi originalmente escrito deliberadamente sem saída do progresso, nada a ver com outras ferramentas, apenas os outros motivos pelos quais você e Gilles citam.
Cascabel
11
@ Jeffromi: Não sei se isso importa. Esta não é uma questão histórica sobre por que cphavia uma maneira de ser codificada pela primeira vez. A questão é por que é assim agora . Já faz muitos anos e alguém poderia ter adicionado a funcionalidade, mas claramente decidiu não fazê-lo. Tenho certeza de que a disponibilidade de outras ferramentas influencia nessa decisão.
Caleb
3

Essa é uma daquelas coisas marginais em que há argumentos a favor e contra a adição de uma opção de barra de progresso ao cp. O principal argumento contra é que você pode não saber antecipadamente que deseja conhecer o progresso. Ctrl-T / SIGINFO está disponível no BSD para essa finalidade, e se isso estiver disponível nas plataformas GNU / Linux, pode haver mais motivos para disparar a lógica da barra de progresso no cp. Enquanto isso, uma solução mais geral é usar uma ferramenta separada como o Coreutils Progress Viewer ( progressanteriormente conhecido como cv) para exibir o status de qualquer processo no sistema.

Pádraig Brady
fonte