如何以只留下每个包的最新版本的方式清理 var/cache/apt

Lui*_*ado 19 apt cache

我想知道一种清理 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.5GB,其中大部分只是旧包与新包的混合。

Pan*_*her 16

使用 autoclean 选项来 apt-get 或 aptitude

sudo apt-get autoclean
sudo aptitude autoclean
Run Code Online (Sandbox Code Playgroud)

从手册页

干净的

clean 清除检索到的包文件的本地存储库。它从 /var/cache/apt/archives/ 和 /var/cache/apt/archives/partial/ 中删除除锁定文件之外的所有内容。

自动清洁

与 clean 一样,autoclean 会清除检索到的包文件的本地存储库。不同的是,它只删除不能再下载的包文件,而且基本上没有用。这允许缓存长期维护而不会失去控制。


enz*_*tib 9

我建议使用以下 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
Run Code Online (Sandbox Code Playgroud)

如果您对输出列表感到满意,请echo从该rm行中删除。

它能做什么?

  1. 它列出了所有 deb 包文件
  2. 删除文件名中从头到尾的所有内容"_",获得包名
  3. 对名称进行排序,删除重复项
  4. 每个名字

    1. 按时间顺序列出该名称对应的包文件
    2. 计算列表中包文件的数量
    3. 如果列表中有多个包裹

      1. 从列表中删除第一个和更新的文件
      2. 从磁盘中删除与该名称对应的所有其他文件

它可以在效率,列出相应套餐之差而得到名称仅包文件加以改进,sortsort -u