Рейтинг:0

Удалите файлы .deb удаленных пакетов из apt-cache.

флаг cn

apt-получить автоочистку удаляет устаревшие .deb файлы из /var/кэш/apt/архивы каталог, которые больше не доступны или больше не могут быть загружены.

тогда как apt-получить чистый удаляет каждый .deb файл, расположенный в /var/кэш/apt/архивы каталог.

Я хочу удалить .deb файлы только тех пакетов, которые больше не установлены, удалены или удалены. Как это сделать?

user535733 avatar
флаг cn
Я полагаю, вы могли бы взять вывод `sudo apt-mark showremove`, немного повозиться с форматированием и подключить этот список к `sudo apt clean`
Рейтинг:0
флаг cn

АПП опирается на фкнтл(2) блокировка; поскольку ubuntu не предоставляет команду блокировки fcntl, вы можете использовать fcntl-блокировка утилита для блокировки (клон команды flock Питера Анвина, правда, немного устаревший).

#!/бин/баш

apt_cache=/var/cache/apt/архивы

# Ссылка: https://github.com/magnumripper/fcntl-lock
# fcntl-lock является клоном fcntl() функции flock(1) Х. Питера Анвина.
coproc БЛОКИРОВКА {
    exec fcntl-блокировка \
    -x -w 3600 "$apt_cache/lock" -c 'echo true; исполнительный кот
}
читать -ru ${LOCK[0]} || { \
    echo Не удалось получить блокировку.
    выход 1
}

объявить -а а=()
объявить -A A=() B=()

# URL декодирует имена файлов .deb.
компакт-диск "$apt_cache"
для b в *.deb; делать
    printf -v c %b "${b//%/\x}"; А[$с]=$б
сделано

# Вы можете использовать @(rc|ii) для добавления дополнительных сокращений
при чтении -r d e; делать
    [[$d = ii]] && B[$e]=1
сделано < <( \
    dpkg-запрос \
        -Wf='${db:Status-Abbrev} ${Пакет}_${Версия}_${Архитектура}.deb\n' \
)

для f в "${!A[@]}"; делать
    [[ ${B[$f]} = 1 ]] || \
        а+=("$apt_cache/${А[$f]}")
сделано
((${#a[@]} > 0)) && \
    printf %s\0 "${a[@]}" | xargs -0 rm -v || выход 0

# эхо Успех | ts >> /var/log/apt-archive-clean.log

Если вы хотите автоматизировать, я думаю, используя systemd.path работает лучше всего.

apt-архив-clean.path

[Ед. изм]
Description=Очистка архива APT

[Дорожка]
PathChanged=/var/cache/apt/archives/lock

[Установить]
WantedBy=многопользовательская.цель

apt-архив-clean.service

[Ед. изм]  
Description=Очистка архива APT  
  
[Оказание услуг]  
Тип=простой  
ExecStart=/opt/bin/apt-archive-clean.sh

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.