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.