PKG Sync v4.0 - utilitário para backup de pacotes DEB baixados

Publicado por Mauricio Ferrari (última atualização em 03/02/2021)

[ Hits: 657 ]

Homepage: https://github.com/MauricioFerrari-NovaTrento

Download 7212.pkgsync




Esse script faz basicamente o seguinte: backup dos arquivos em cache, verifica quais pacotes estão instalados no sistema e o que não estiver, ele exclui.

Já tinha postado outras versões, porém essa está bem melhorada e o código está mais decente.

Tentei fazê-lo o mais otimizado possível. Ele conta com os seguintes parâmetros:

- ls = Lista os Pacotes em Cache.
- rm = Remove os Pacotes em Cache. Usa o apt clean.
- cp =  Faz o Backup dos Pacotes em Cache.
- check = Checa quais são os Pacotes Obsoletos.
- clean = Checa e Exclui os Pacotes Obsoletos.

O local de Backup deve ser configurado manualmente e as cores você muda conforme preferir.

  



Esconder código-fonte

#!/bin/bash

 ### PKG Sync v4.0 - 02/12/2020 - By Mauricio Ferrari - <[email protected]>
 ### Uso: ./pkgsync <check/clean/rm/ls/cp>

##################################################################################


 ### Configuração Manual do Destino dos Pacotes


DR=~/DDE


 ### Constantes A=${A:-B}


DB=${DB:-/var/cache/apt/archives/*deb} #*/
BN=${BN:-/usr/bin}
NL=${NL:-/dev/null}
TM=${TM:-temp}
L1=${L1:-$TM/lst1}
L2=${L2:-$TM/lst2}
CL=${CL:-$TM/clean}


 ### Padrão de Cores


BL=${BL:-\\033[1;47;34m}
GR=${GR:-\\033[0;47;30m}
RD=${RT:-\\033[1;47;31m}
YL=${RT:-\\033[1;40;33m}
CN=${CN:-\\033[1;33m}
WT=${WT:-\\033[1;37m}
RT=${RT:-\\033[0m}


 ### Finalização do script


fim()
{
   [[ -e $TM ]] && rm -r $TM 2> $NL
   [[ $ERROR == 1 ]] && exit 1
   [[ $ERROR == 0 ]] && exit 0
}


 ### Informação do Sistema


info()
{
   echo -e "\n $GR $(basename $0) - Backup dos Pacotes baixados em Cache $RT \n\n $GR Uso: $RT \n $GR $(basename $0) <ls|rm|cp|check|clean> $RT"
   echo -e "\n $GR Parâmetros: $RT  $GR - ls = Listar os Pacotes em Cache.      $RT \n $GR       - rm = Remover os Pacotes em Cache.     $RT"
   echo -e "$GR       - cp = Copiar os Pacotes em Cache.      $RT \n $GR       - check = Verificar Pacotes Duplicados. $RT"
   echo -e "$GR       - clean = Limpar Pacotes Duplicados.    $RT\n"
   fim
}


 ### Listar Pacotes em Cache


list()
{
   echo -e "$WT"
   ls --color=auto $( echo "$DB" | cut -d '*' -f 1 )
   fim
}


 ### Remover Pacotes em Cache


rmcache()
{
   sudo apt-get clean
   echo -e "\n $BL Cache APT redefinido. $RT"
   fim
}


 ### Comando para Cópia


gocopy()
{
   echo -e "$CN"
   cp -v $DB $DR | cut -d '/' -f 6 | sed "s/'.*'/ copiado/g"
   echo -e "$RT"
}


 ### Copiar Pacotes em Cache


copy()
{
   [[   `ls $DB 2> $NL` ]] && gocopy
   [[ ! `ls $DB 2> $NL` ]] && echo -e "\n $YL Nada Copiado. $RT"
   fim
}


 ### Verificar LOGs Existentes


logcheck()
{
   CON=0
   CNT=0
   while (( $CON == 0 )); do
      [[ ! -e ~/excluded$CNT.log ]] && CON=1 && DS=~/excluded$CNT.log
      [[   -e ~/excluded$CNT.log ]] && let CNT=CNT+1;
   done
}


 ### Gerar os Arquivos para a Comparação


listgen()
{
   logcheck


   ### Controle de Erro


   [[ ! -e "$DR"              ]] && echo -e "\n $RD O diretório $DR não existe. $RT"                     && ERROR=1 && fim
   [[ `ls --ignore=*.deb $DR` ]] && echo -e "\n $RD O diretório $DR deveria conter só arquivos DEB. $RT" && ERROR=1 && fim


   ### Gerando as listas de comparação.


   mkdir $TM 2> $NL
   apt list --installed 2> $NL | sed -e 's| \[.*\]||g' -e 's|/.*now |_|g' -e 's| |_|g' -e '1d' 1> $L1
   ls $DR | sed -e 's|\.deb||g' -e 's|%3a|:|g' > $L2
}


 ### Visualizando o Arquivo de LOG.


viewlog()
{
   VF=0
   [[ ! `cat $DS 2> $NL` ]] && VF=1 && echo -e "\n $YL Nenhum novo log foi gerado. Não há pacotes obsoletos. $RT"
   [[ ! "xdg-open $DS" ]] && [[ $VF = 0 ]] && echo -e "\n $YL Não foi possível encontrar um editor para visualizar o log. $RT"
   [[   "xdg-open $DS" ]] && [[ $VF = 0 ]] && xdg-open $DS
   fim
}


 ### Verificar Pacotes Duplicados


checkup()
{
   listgen
   for X in `cat $L2`; do
      [[ $(cat $L1 | grep -w $X) = "" ]] && echo $X >> $DS
   done
   viewlog
}


 ### Comando para Limpeza


goclean()
{
   echo $X >> $DS
   echo $X | sed -e 's|:|%3a|g' > $CL
   rm $DR/$(cat $CL).deb
}


 ### Limpar Pacotes Duplicados


cleaner()
{
   listgen
   for X in `cat $L2`; do
      [[ $(cat $L1 | grep -w $X) = "" ]] && goclean
   done
   viewlog
}


 ### Função Principal


main()
{
   ERROR=0
   [[ $1 = ""   ]] && info
   [[ $1 = "ls" ]] && list
   [[ $1 = "rm" ]] && rmcache
   [[ $1 = "cp" ]] && copy
   [[ $1 = "check" ]] && checkup
   [[ $1 = "clean" ]] && cleaner
}; main $1

Scripts recomendados

Backup de logs do sistema

Backup com a ferramenta tar

Backup Database MySQL Automatizado

Backup de arquivos e banco de dados com envio de e-mail

clonagem de disco


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts