Как очистить var / cache / apt таким образом, чтобы он оставил только последние версии каждого пакета

Я хочу знать, как очистить папку var / cache / apt таким образом, чтобы она оставила только последнюю версию пакета, если она имеет несколько версий или она оставляет пакет, если он является единственным из этих программ.

Например, у меня есть несколько пакетов vlc (vlc_1.1.11, vlc_1.1.12 ..) и несколько пакетов вина (wine1.3_1.3.34, wine1.3_1.3.35, wine1.3_1.3.36, wine1.3_1.3.37 …) и многим другим нравится это.

Итак, как сделать очистку в этой папке, чтобы она оставила только последние пакеты. На данный момент у меня 2,5 ГБ, и большинство из них – это более старые пакеты, смешанные с более новыми.

Я предлагаю следующий сценарий 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 

Удалите echo из строки rm если вы удовлетворены выходным списком.

Что оно делает?

  1. В нем перечислены все файлы пакета deb
  2. удалить все в имени файла с первого "_" до конца, получив имя пакета
  3. сортировать имена, удалять дубликаты
  4. для каждого имени

    1. список файлов пакетов, соответствующих этому имени, в порядке времени
    2. подсчитайте количество файлов пакета в списке
    3. если в списке имеется более одного пакета

      1. удалить из списка первый и более новый файл
      2. удалить с диска все другие файлы, соответствующие этому имени

Его можно было бы повысить в эффективности, перечисляя только файлы пакетов, соответствующие именам пакетов, полученным из разницы между sort и sort -u .

используйте опцию autoclean для apt-get или aptitude

 sudo apt-get autoclean sudo aptitude autoclean 

На странице руководства

чистый

clean очищает локальный репозиторий полученных файлов пакетов. Он удаляет все, кроме файла блокировки, из / var / cache / apt / archives / и / var / cache / apt / archives / partial /.

Автоматическая очистка

Как и чистый, autoclean очищает локальный репозиторий загруженных файлов пакетов. Разница в том, что он удаляет только файлы пакетов, которые больше не могут быть загружены и в основном бесполезны. Это позволяет хранить кеш в течение длительного периода времени, не выйдя из-под контроля.

Я предлагаю более простой и понятный для пользователя скрипт bash, основанный на алгоритме enzotib , который не удаляет дополнительные файлы, как это делает оригинал:

 #! /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