Por favor, note que eu não pergunto como . Eu já conheço opções como pv
e rsync -P
.
Quero perguntar por que não cp
implementa uma barra de progresso, pelo menos como uma bandeira?
wget
cp
architecture
Lamnk
fonte
fonte
pv
ersync -P
, consulte mover arquivos com barra de progresso ( uma das respostas cita um patch para,cp
paracp -g
fornecer um indicador de progresso).Respostas:
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.
fonte
cp
remonta ao início dos anos 70: é o mais tradicional possível.dd
dar declarações de progresso?dd
remonta 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
.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 decp
onde, na maioria dos casos, você apenas piscava e recuperava o prompt.No mundo unix, cada ferramenta é projetada para fazer um trabalho e fazê-lo bem. Por que se
cp
preocupar com a saída do progresso quando outra ferramenta comopv
essa já é usada? Na mesma linha, por que tantos programas despejam coisas na tela sem paginação? Porque já existem ferramentas para esse trabalho, comomore
(ouless
). 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
cp
sã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.
fonte
pv
quandocp
foi escrito? É um bom argumento, mas tenho a sensação de que, neste caso,cp
foi originalmente escrito deliberadamente sem saída do progresso, nada a ver com outras ferramentas, apenas os outros motivos pelos quais você e Gilles citam.cp
havia 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.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 (
progress
anteriormente conhecido comocv
) para exibir o status de qualquer processo no sistema.fonte