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

Modified on: Sat, 09 Jun 2018 19:30:53 +0800

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

最佳答案

我建议使用以下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

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

它做什么?

  1. 列出所有deb包文件
  2. 从第一个rm到结尾删除文件名中的所有内容,获取包名称
  3. 对名称进行排序,删除重复项
  4. 每个名称

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


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

    通过仅列出与"_"sort之间的差异获得的包名相对应的包文件,可以提高效率。

作者:enzotib

相关问答

添加新评论