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

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

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

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

18
задан 18 January 2012 в 22:21

3 ответа

Я предлагаю следующий сценарий удара

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

9
ответ дан 18 January 2012 в 22:21

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

sudo apt-get autoclean
sudo aptitude autoclean

Со страницы руководства

clean

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

autoclean

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

0
ответ дан 18 January 2012 в 22:21

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

#! /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
ответ дан 18 January 2012 в 22:21

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

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