Como limpar var / cache / apt de uma forma que deixe apenas as versões mais recentes de cada pacote

17

Eu quero saber uma maneira de limpar a pasta var / cache / apt de uma forma que ela só saia da versão mais recente de um pacote se tiver várias versões ou deixar um pacote se ele for o único desse programa .

Por exemplo, eu tenho vários pacotes vlc (vlc_1.1.11, vlc_1.1.12 ..) e vários pacotes de vinhos (wine1.3_1.3.34, wine1.3_1.3.35, wine1.3_1.3.36, wine1.3_1.3.37. ..) e muitos outros como este.

Então, como fazer uma limpeza nesta pasta que deixa apenas os pacotes mais recentes. No momento eu tenho 2,5 GB e a maioria é apenas pacotes mais antigos misturados com os mais novos.

    
por Luis Alvarado 18.01.2012 / 18:10

3 respostas

9

Eu proponho o seguinte script bash

#!/bin/bash

cd /var/cache/apt/archives/
printf '%s\n' *.deb | 
  awk -F_ '{ print  }' |
  sort -u | 
  while read pkg; do 
    pkg_files=($(ls -t "$pkg"_*.deb))
    nr=${#pkg_files[@]}
    if ((nr > 1)); then
      unset pkg_files[0]
      echo rm "${pkg_files[@]}"
    fi
  done

Remova o echo da linha rm se você estiver satisfeito com a lista de saída.

O que isso faz?

  1. Listar todos os arquivos do pacote deb
  2. remover tudo no nome do arquivo do primeiro "_" para o final, obtendo o nome do pacote
  3. classifique os nomes, removendo duplicatas
  4. para cada nome

    1. listar os arquivos de pacote correspondentes a esse nome na ordem de tempo
    2. conta o número de arquivos do pacote na lista
    3. se houver mais de um pacote na lista

      1. remova da lista o primeiro e mais recente arquivo
      2. remova do disco todos os outros arquivos correspondentes a esse nome

Poderia ser melhorado com eficiência, listando apenas os arquivos de pacote correspondentes aos nomes de pacotes obtidos a partir da diferença entre sort e sort -u .

    
por enzotib 18.01.2012 / 21:48
15

use a opção autoclean para apt-get ou aptitude

sudo apt-get autoclean
sudo aptitude autoclean

Da página do manual

  

limpar

     

clean limpa o repositório local de arquivos de pacotes recuperados.   Ele remove tudo, exceto o arquivo de bloqueio de / var / cache / apt / archives / e / var / cache / apt / archives / partial /.

     

autoclean

     

Como clean, o autoclean limpa o repositório local de arquivos de pacotes recuperados. A diferença é que ele remove apenas arquivos de pacotes que não podem mais ser baixados e são inúteis. Isso permite que um cache seja mantido por um longo período sem que ele fique fora de controle.

    
por Panther 18.01.2012 / 18:50
0

Eu proponho um script bash mais simples e mais legível, baseado no algoritmo da enzotib , que não remove arquivos extras como o original:

#! /usr/bin/env bash

cd /var/cache/apt/archives/
for pkg in 'ls *.deb | cut -d _ -f 1 | sort -u'; do
    if [ $(ls $pkg\_* | wc -l) -gt 1 ]; then
        files=$(ls -vr $pkg\_*)
        rmfiles='echo $files | cut -d " " -f 2-'
        rm -v $rmfiles
    fi
done
    
por Danial Behzadi 17.11.2015 / 23:01

Tags