Come pulire var / cache / apt in modo da lasciare solo le ultime versioni di ciascun pacchetto


18

Voglio sapere un modo per pulire la cartella var / cache / apt in modo che lasci l'ultima versione di un pacchetto solo se ha diverse versioni o 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, wine1.3_1.3.37 ...) e molti altri come questo.

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

Risposte:


9

Propongo il seguente script bash

#!/bin/bash

cd /var/cache/apt/archives/
printf '%s\n' *.deb | 
  awk -F_ '{ print $1 }' |
  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

Rimuovere il echodalla rmlinea se si è soddisfatti con l'elenco di output.

Cosa fa?

  1. Elenca tutti i file del pacchetto deb
  2. rimuovi tutto nel nome del 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. contare il numero di file del pacchetto nell'elenco
    3. se esiste più di un pacchetto nell'elenco

      1. rimuove dall'elenco il primo e il file più recente
      2. rimuove dal disco tutti gli altri file corrispondenti a quel nome

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


Ha funzionato perfettamente. Sto anche dando un +1 a bodhi perché anche la pulizia automatica ha aiutato a ripulire un po '. Quindi forse entrambi insieme fanno un ottimo lavoro. Grazie enzotib.
Luis Alvarado,

16

usa l'opzione autoclean per apt-get o aptitude

sudo apt-get autoclean
sudo aptitude autoclean

Dalla pagina man

pulito

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

autoclean

Come clean, autoclean cancella il repository locale dei file di 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 sfugga al controllo.


Puoi aggiungere sudo aptitude autoclean. Anche l'autoclean in entrambi i casi (apt-get e aptitude) lascia ancora versioni precedenti che fanno un salto enorme come thunderbird 8.0 e thundebird 9.0. Tuttavia, ha rimosso i pacchetti più vecchi di thinderbird 8.x ma lascia come le versioni complete senza considerare che 9.0 è superiore a 8.0. Questo è solo uno dei tanti casi che mi sono rimasti. Altre idee per affrontare questa quantità di pacchetti più vecchi?
Luis Alvarado,

Mi dispiace, se autoclean non ha funzionato non conosco un metodo semplice. Spero che qualcun altro abbia un suggerimento migliore.
Pantera,

0

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

#! /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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.