Я хочу знать способ очистки папки 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, если вы удовлетворены выходным списком.
Что он делает?
В нем перечислены все файлы deb-пакета, удаляющие все в имени файла с первого "_" до конца, получение имени пакета, сортировка имен, удаление дубликатов для каждого списка имен файлов пакета, соответствующих этому имени в time order подсчитывает количество файлов пакета в списке, если в списке есть более одного пакета, из которого извлекаются из первого и более нового файлов, удаляются с диска все другие файлы, соответствующие этому имени. Он может быть улучшены в эффективности, перечисляя только файлы пакетов, соответствующие именам пакетов, полученным из разницы между sort и sort -u.
использовать опцию автозапуска для apt-get или aptitude
sudo apt-get autoclean
sudo aptitude autoclean
Из man-страницы
clean clean очищает локальный репозиторий файлов загруженных пакетов. Он удаляет все, кроме файла блокировки, из / var / cache / apt / archives / и / var / cache / apt / archives / partial /. autoclean Как и чистый, autoclean очищает локальный репозиторий полученных файлов пакетов. Разница в том, что он удаляет только файлы пакетов, которые больше не могут быть загружены и в основном бесполезны. Это позволяет хранить кеш в течение длительного периода времени, не выйдя из-под контроля.Я предлагаю более простой и понятный для пользователя скрипт 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