Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile
Visite também: Ipok ·  Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Lan University

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.

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.

 

 

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

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.97/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (2168 votos)

Opinião dos Leitores

edps
10 Mar 2013, 13:39
Assim como no caso da dica do Patool, outra dica sua que estou fazendo uso.
Paulo Roberto Bagatini
06 Mar 2013, 00:29
Pra não deixar o Cesar mentir sozinho :-p, proponho duas formas de pegar a última versão do pacote (coreutils, no caso):

$ 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)
Paulo Roberto Bagatini
05 Mar 2013, 11:42
Que beleza, Cesar :)

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!
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Servidores com 50% de desconto no primeiro mês e setup GRATUITO




 

Expressões Regulares – Uma Abordagem Divertida - 4ª edição