Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
Copiando e movendo arquivos, com uma barra de status!
Colaboração: Cesar Brod
Data de Publicação: 02 de março de 2013
Ah! Aqueles velhos tempos do computador à lenha, quando nenhum arquivo tinha mais do que poucos kbytes. Hoje você quer copiar ou mover um arquivo (um ebook de 327 Mbytes) de uma pasta para a outra e fica ali, com o olhar perdido, esperando que o prompt da linha de comando volte a aparecer...
Sim, caro leitor! Você pode argumentar que, com interfaces gráficas modernas, além do progresso da cópia e de uma estimativa de seu término serem exibidos, ainda é possível abrir uma outra janela e jogar gamão. Mas há ainda aqueles casos onde seu servidor está longe, muito longe de você e tudo o que liga você a ele, além do seu amor, é uma conexão ssh.
Mas, não se apavore! Para tudo há uma saída. Abra lá uma sessão ssh em seu servidor (ou experimente tudo isso, primeiro, em uma máquina local - uma prática que você já adotou!) e verifique qual é a versão mais recente do coreutils:
elinks http://ftp.gnu.org/gnu/coreutils/?O=D | grep coreutils -m 2
Como resultado, você deve ter algo parecido com isso:
[22][ ] [23]coreutils-8.21.tar.xz.sig 14-Feb-2013 12:06 836 [24][ ] [25]coreutils-8.21.tar.xz 14-Feb-2013 12:06 5.1M
O elinks acessa o endereço onde o programa coreutils (que contém o cp, o mv e outros). A chave ?O=D indica que os resultados devem ser exibidos na ordem decrescente de data (os mais recentes no início). O grep filtrará apenas as linhas que contém a palavra coreutils e a chave -m indica a quantidade de linhas que queremos ver exibidas no terminal. Facinho, né?
Agora baixe a versão mais recente do coreutils:
wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
Claro, você poderia fazer um script que, usando os dois comandos acima ou outras alternativas, já baixaria automaticamente a última versão do coreutils. Aliás, é bem provável que o Paulo Roberto Bagatini faça isso! ;)
Se algum dos comandos acima não funcionou é muito provável que você não tenha os programas instalados. Resolva isto com um apt-get e aproveite para instalar o pacote build-essential, que você precisará para os passos a seguir:
sudo apt-get install wget elinks build-essential
Aceite a instalação de qualquer prerrequisito necessário.
Execute os seguintes comandos:
tar xvJf coreutils-8.21.tar.xz cd coreutils-8.21/ wget http://zwicke.org/web/advcopy/advcpmv-0.4-8.21.patch patch -p1 -i advcpmv-0.4-8.21.patch ./configure make sudo cp src/cp /usr/local/bin/cp sudo cp src/mv /usr/local/bin/mv
O comando tar irá descompactar os fontes do coreutils. Em seguida, você usa o cd para ir até a pasta onde os fontes estão descompactados. O wget obtém a modificação que irá melhorar os comandos cp e mv e o comando patch irá aplicá-la no cógigo. O configure verificará seu ambiente e preparará os fontes para que sejam compilados (transformados em programas executáveis), o que é feito pelo comando make. Por fim, os comandos cp copiarão os novos comandos cp e mv para o caminho (PATH) de execução de seu sistema. Você precisará usar o sudo já que a pasta /usr/local/bin pertence ao superusuário (root).
Nota: Usando a informação desta mesma dica você sabe, agora, como saber se a modificação advcpmv-0.4-8.21.patch é mesmo a mais recente, certo?
Antes de sair fazendo experiências, veja o resultado deste comando:
echo $PATH
Exemplo de resultado:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:.
Repare que você copiou os novos comandos para /usr/local/bin, que vem antes, em seu caminho de execução, de /usr/bin - onde encontram-se os originais cp e mv. Assim, para voltar tudo ao que era antes basta você apagar as novas versões de cp e mv da pasta /usr/local/bin.
Para saber onde está um determinado comando que você utiliza, use o which:
which cp
Resultado:
/usr/local/bin/cp
Agora teste!
cp -g um_arquivo_grande copia_arquivo_grande
A chave g é a novidade! Ela irá mostrar uma barra de progresso da cópia. O mesmo vale para o comando mv.
Como, porém, sempre vou querer usar a chave g agora que ela está disponível, criarei aliases para os comandos cp e mv. Para saber mais sobre aliases, veja esta dica ou várias outras aqui no Dicas-L. Em meu caso, adicionei estas linhas ao final do /etc/bash.bashrc (assim estes aliases ficam disponíveis para todos os usuários):
alias cp='cp -g' alias mv='mv -g' alias rm='rm -i'
Nota: O alias rm='rm -i' não tem nada a ver com o tema deste artigo! Mas todo mundo deve, por amor a seus preciosos arquivos, tê-lo. Ele faz com que qualquer tentativa de remoção de arquivos ou pastas solicite uma confirmação.
Mais informações na página do projeto Advanced Copy.
Cesar Brod é do tempo em que controladores de comunicação no protocolo TCP/IP não cabiam em uma USB.
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.
Avalie esta dica
Opinião dos Leitores
10 Mar 2013, 13:39
06 Mar 2013, 00:29
$ inicio=http://ftp.gnu.org/gnu/coreutils
$ er="coreutils-([0-9]{1,2}.){1,}.tar.[[:alnum:]]{2,3}"
$ last=$inicio/$(wget -qO- $inicio | grep -Eo "$er" | sort -V | tail -n1)
que exige acrescentar o caminho antes do arquivo, e
$ last=$(lynx -dump -listonly -nonumbers $inicio | grep -Eo "http:.*$er" | sort -V | tail -n1)
que já traz a url completa junto.
Ambas as formas certamente podem ser escritas de forma mais simplificada para ESSE EXEMPLO em especial, mas assim como foram escritas, buscam uma numeração de versão menos padronizada em listagens fora de orgem numérica de versão.
Depende da distribuição, claro, mas chuto que o wget é mais presente, por default, que o lynx. Afinal quem, em sã consciência, navega pelo modo texto (fora o Cesar e uma penca cada vez menor de trogloditas? :-p)
05 Mar 2013, 11:42
Realmente, nem só de efeitos especiais e aceleração 3D vive a informática. Quem depende muito disso, tem uma produtividade que cai a zero quando esses recursos não estão disponíveis.
Longa vida ao Modo Texto!



