segunda-feira, 16 de agosto de 2021

Copiando e movendo no terminal com uma barra de progresso!

Por padrão, nas distribuições linux não aparece uma barra de progresso quando copiamos ou movemos um arquivo pelo terminal, então neste post iremos como adicionar esta funcionalidade:

sudo apt install elinks git wget

elinks http://ftp.gnu.org/gnu/coreutils/?O=D | grep coreutils -m 3

Como resultado, você deve ter algo assim:

elinks http://ftp.gnu.org/gnu/coreutils/?O=D | grep coreutils -m 3
                            Index of /gnu/coreutils
[16][   ]      [17]coreutils-9.3.tar.xz.sig          2023-04-18     833  
[18][   ]      [19]coreutils-9.3.tar.xz              2023-04-18    5.5M 

elinks acessa o endereço onde o programa coreutils (que contém o cp, o mv e outros) está. 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. 

Agora baixe a versão mais recente do coreutils:

cd /home/$USER
wget http://ftp.gnu.org/gnu/coreutils/coreutils-9.3.tar.xz

Se algum dos comandos acima não funcionou é muito provável que você não tenha os programas instalados. Resolva isto com um apt e aproveite para instalar o pacote build-essential, que você precisará para os passos a seguir:

sudo apt install wget elinks build-essential git 

Aceite a instalação de qualquer prerrequisito necessário.

Execute os seguintes comandos:

tar xvJf coreutils-9.3.tar.xz
cd /home/$USER/coreutils-9.3/
git clone https://github.com/jarun/advcpmv
mv /home/$USER/coreutils-9.3/advcpmv/advcpmv-0.9-9.3.patch /home/$USER/coreutils-9.3/
patch -p1 -i advcpmv-0.9-9.3.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/bin:/usr/bin:/bin:/usr/local/games:/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. 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.


Referências:

https://www.dicas-l.com.br/arquivo/copiando_e_movendo_arquivos_com_uma_barra_de_status.php

https://github.com/jarun/advcpmv



Nenhum comentário:

Postar um comentário