Cómo limpiar var / cache / apt de forma que solo deja las últimas versiones de cada paquete

17

Quiero saber cómo limpiar la carpeta var / cache / apt de forma que solo deje la última versión de un paquete si tiene varias versiones o deja un paquete si es el único de ese programa. .

Por ejemplo, tengo varios paquetes vlc (vlc_1.1.11, vlc_1.1.12 ..) y varios paquetes de vino (wine1.3_1.3.34, wine1.3_1.3.35, wine1.3_1.3.36, wine1.3_1.3.37. ..) y muchos otros como este.

Entonces, ¿cómo hacer una limpieza en esta carpeta que deja solo los últimos paquetes? Por el momento tengo 2.5GB y la mayoría son paquetes más antiguos mezclados con los más nuevos.

    
pregunta Luis Alvarado 18.01.2012 - 17:10

3 respuestas

9

Propongo el siguiente 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

Elimina el echo de la línea rm si estás satisfecho con la lista de resultados.

¿Qué hace?

  1. Lista todos los archivos del paquete Deb
  2. elimina todo en el nombre de archivo del primer "_" hasta el final, obteniendo el nombre del paquete
  3. ordena los nombres, elimina los duplicados
  4. para cada nombre

    1. enumera los archivos de paquete correspondientes a ese nombre en orden cronológico
    2. cuenta la cantidad de archivos de paquete en la lista
    3. si hay más de un paquete en la lista

      1. eliminar de la lista el primer archivo y el más nuevo
      2. eliminar del disco todos los demás archivos correspondientes a ese nombre

Se podría mejorar la eficiencia al enumerar solo los archivos de paquete correspondientes a los nombres de paquetes obtenidos a partir de la diferencia entre sort y sort -u .

    
respondido por el enzotib 18.01.2012 - 20:48
15

use la opción autoclean para apt-get o aptitude

sudo apt-get autoclean
sudo aptitude autoclean

En la página del manual

  

limpio

     

clean borra el repositorio local de los archivos recuperados del paquete.   Elimina todo menos el archivo de bloqueo de / var / cache / apt / archives / y / var / cache / apt / archives / partial /.

     

autoclean

     

Al igual que clean, autoclean borra el repositorio local de los archivos recuperados del paquete. La diferencia es que solo elimina los archivos del paquete que ya no se pueden descargar y son en gran medida inútiles. Esto permite que un caché se mantenga durante un largo período de tiempo sin que crezca fuera de control.

    
respondido por el Panther 18.01.2012 - 17:50
0

Propongo un script bash legible y más simple, basado en el algoritmo enzotib , que no elimina los archivos adicionales , como el original 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
    
respondido por el Danial Behzadi 17.11.2015 - 22:01

Lea otras preguntas en las etiquetas