Come pulire var / cache / apt in modo che lasci solo le ultime versioni di ogni pacchetto

17

Voglio sapere come pulire la cartella var / cache / apt in modo che lasci la versione più recente di un pacchetto solo se ha diverse versioni o se lascia un pacchetto se è l'unico di quel programma .

Ad esempio, ho diversi pacchetti vlc (vlc_1.1.11, vlc_1.1.12 ..) e diversi pacchetti vino (wine1.3_1.3.34, wine1.3_1.3.35, wine1.3_1.3.36, wine 1.3.3.3.37. ..) e molti altri come questo.

Quindi come fare una pulizia in questa cartella che lascia solo i pacchetti più recenti. Al momento ho 2,5 GB e la maggior parte sono solo pacchetti più vecchi mescolati con quelli più recenti.

    
posta Luis Alvarado 18.01.2012 - 18:10

3 risposte

9

Propongo il seguente 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

Rimuovi echo dalla riga rm se sei soddisfatto dell'elenco di output.

Che cosa fa?

  1. Elenca tutti i file del pacchetto deb
  2. rimuovi tutto il nome file dal primo "_" alla fine, ottenendo il nome del pacchetto
  3. ordina i nomi, rimuovendo i duplicati
  4. per ogni nome

    1. elenca i file del pacchetto corrispondenti a quel nome in ordine di tempo
    2. conta il numero di file del pacchetto nell'elenco
    3. se c'è più di un pacchetto nell'elenco

      1. rimuovi dalla lista il file primo e più recente
      2. rimuovi dal disco tutti gli altri file corrispondenti a quel nome

Potrebbe essere migliorato in termini di efficienza, elencando solo i file del pacchetto corrispondenti ai nomi dei pacchetti ottenuti dalla differenza tra sort e sort -u .

    
risposta data enzotib 18.01.2012 - 21:48
15

usa l'opzione autoclean per apt-get o aptitude

sudo apt-get autoclean
sudo aptitude autoclean

Dalla pagina man

  

pulita      

clean cancella il repository locale dei file del pacchetto recuperati.   Rimuove tutto tranne il file di lock da / var / cache / apt / archives / e / var / cache / apt / archives / partial /.

     

autoclean

     

Come pulito, autoclean cancella il repository locale dei file del pacchetto recuperati. La differenza è che rimuove solo i file del pacchetto che non possono più essere scaricati e sono in gran parte inutili. Ciò consente di mantenere una cache per un lungo periodo senza che questa cresca senza controllo.

    
risposta data Panther 18.01.2012 - 18:50
0

Propongo uno script bash più semplice e più leggibile, basato sull'algoritmo enzotib , che non rimuove file extra , come l'originale do:

#! /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
    
risposta data Danial Behzadi 17.11.2015 - 23:01

Leggi altre domande sui tag