Pages

Sunday, March 03, 2013

cp e mv com barra de progresso


Achei muito interessante a dica que surgiu no Dicas-L sobre colocar uma barra de progresso nos comandos cp e mv.

Mas ao invés de compilar eu mesmo, eu instalei uma versão binária disponibilizada no site do projeto.

Particularmente eu não me sinto confortável em usar uma versão binária para algo tão importante quanto os comandos cp e mv. Assim, ao invés de copiar os comandos 'cp' e 'mv' para o /usr/local/bin com o mesmo nome, eu os copiei como os nomes 'cpa' e 'mva'. Assim, eu somente utilizarei esses comandos quando eu quiser uma barra de progresso.

Outro incomodo pessoal é não ter a certeza de que estou usando a mesma versão da disponível no sistema. Particularmente, eu me sentirei incomodado se eu usar esse comando sem me lembrar disso (há uma tendência a esquecer que deve verificar a versão do seu programa e compatibilizá-la com o resto do sistema), assim, eu adicionei o seguinte trecho no meu ~/.bashrc.
# Pré-definindo quem são os comandos cp e mv avançados 
# e adicionando a barra de progresso automaticamente.
# http://www.zwicke.org/web/advancedcopy.html
    CPA=/usr/local/bin/cpa
    if [ -x $CPl ]; then
    if [ "$( /usr/bin/cp --version|head -n1)" == "$($CPA --version|head -n1)" ]
    then
     alias cpa='/usr/local/bin/cpa -gR'
     alias mva='/usr/local/bin/mva -gR'
    else
     alias cpa='/usr/local/bin/cpa -R'
     alias mva='/usr/local/bin/mva -R'
    fi
   fi
Repare a minha trapaça ! Se eu usar o comando 'cpa' ou 'mva' eu estou conscientemente pedindo uma barra  de progresso, mas ela só vai aparecer se eu utilizar a opção '-g'. Essa opção eu adicionei automaticamente ao comando 'cpa' e 'mva', afinal, só para isso é que ele me interessa ! Se por acaso eu chamar o comando 'cpa' ou 'mva' e barra de progresso não aparecer, é porque a opção '-g' não está sendo usada e isso significa que o meu alias não foi 'imposto' ao sistema, assim, sou alertado de que a versão do meu programa está desatualizada. Se eu quiser ignorar isso, basta chamar no terminal o comando 'cpa' ou 'mva', impondo manualmente a opção '-g'. É uma trapaça, mas funciona.

Explicando o código do .bashrc, o primeiro condicional verifica se o programa 'cpa' existe e é um executável (variável CPA, definida em primeiro lugar). Se não, não há o que fazer... se sim, verifica a versão do comando cpa em relação a versão do comando cp. Se forem iguais, define o alias tal qual todo mundo realmente quer quando se propõem a fazer essa instalação, se não forem, adicione apenas a opção de recursividade para que eu não tenha que pensar em resolver o problema quando ele surgir. O segundo else é opcional, existe apenas no meu caso porque eu adicionei a opção -R no alias eu quis mantê-la em qualquer caso, do contrário ele não faria sentido algum.

Há algumas alternativas interessantes para esse trecho de código, como instalar o programa em um local alternativo, fora do $PATH e configurar manualmente a existência do programa no .bashrc. Isso dá mais controle, se o computador for multiusuário, mas deixo a imaginação de cada um trabalhar por si só.

[update 04/março/2013]
Atualização de correção: cometi um erro de digitação quando escrevi o script acima.
Onde se lia:
    if [ -x $CPl ]; then
foi corrigido para.
    if [ -x $CPA ]; then
ou seja, a variável correta é CPA enão CPl
Sem essa correção o script vai produzir erro quando não encontrar o arquivo cpa no devido lugar.
[/update]

No comments:

Post a Comment