Как очистить 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 ГБ, и большинство из них - это более старые пакеты, смешанные с более новыми.

17
задан 19 January 2012 в 00:21

3 ответа

Я предлагаю следующий сценарий 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, если вы удовлетворены выходным списком.

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

В нем перечислены все файлы deb-пакета, удаляющие все в имени файла с первого "_" до конца, получение имени пакета, сортировка имен, удаление дубликатов для каждого списка имен файлов пакета, соответствующих этому имени в time order подсчитывает количество файлов пакета в списке, если в списке есть более одного пакета, из которого извлекаются из первого и более нового файлов, удаляются с диска все другие файлы, соответствующие этому имени

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

9
ответ дан 25 May 2018 в 15:04
  • 1
    Он отлично работал. Я также даю +1 бодхи, потому что автоклав также помог немного очистить. Так что, возможно, оба вместе делают отличную работу. Спасибо enzotib. – Luis Alvarado♦ 19 January 2012 в 03:21

использовать опцию автозапуска для apt-get или aptitude

sudo apt-get autoclean
sudo aptitude autoclean

Из man-страницы

clean clean очищает локальный репозиторий файлов загруженных пакетов. Он удаляет все, кроме файла блокировки, из / var / cache / apt / archives / и / var / cache / apt / archives / partial /. autoclean Как и чистый, autoclean очищает локальный репозиторий полученных файлов пакетов. Разница в том, что он удаляет только файлы пакетов, которые больше не могут быть загружены и в основном бесполезны. Это позволяет хранить кеш в течение длительного периода времени, не выйдя из-под контроля.
15
ответ дан 25 May 2018 в 15:04
  • 1
    Можете ли вы добавить autoclean sudo aptitude. Также автоклав в обоих случаях (apt-get и aptitude) по-прежнему оставляет более старые версии, которые совершают огромный прыжок, например, thunderbird 8.0 и thundebird 9.0. Тем не менее, он удалил старые пакеты thinderbird 8.x, но он остается как версии полной версии без учета того, что 9.0 выше 8.0. Это всего лишь один из многих случаев, которые я все еще оставил. Любые другие идеи, чтобы столкнуться с этим количеством старых пакетов? – Luis Alvarado♦ 18 January 2012 в 23:57
  • 2
    Прошу прощения, если автоклав не работал, я не знаю простого метода. Надеюсь, что у кого-то есть лучшее предложение. – Panther 19 January 2012 в 01:31

Я предлагаю более простой и понятный для пользователя скрипт bash, основанный на алгоритме enzotib, который не удаляет дополнительные файлы, такие как оригинал 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
0
ответ дан 25 May 2018 в 15:04

Другие вопросы по тегам:

Похожие вопросы: