De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


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.

Cesar Brod ministra cursos in-house adequados à necessidade de sua empresa, além de atuar como coach de equipes ágeis. Visite nosso portal para saber mais ou entre em contato diretamente com o autor para mais informações.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Cesar Brod