用一行代码更新删除(而不是移动)

用一行代码更新删除(而不是移动)

在我的本地存储库中(见下文),我下载了多个版本的相同软件包并将其存储在 deb 软件包目录中。由于 Ubuntu 始终倾向于使用最高版本,因此我不需要下载和使用早期版本。(所有版本都在同一个文件夹中)。

如何从本地 deb 文件夹中删除软件包的早期版本?手动删除它们不是一个可行的解决方案。(您无法检查数千个文件中的版本)

有任何想法吗?!!

也许一个脚本可以检查每个包的版本,保留较新的版本并删除较旧的版本,这可以解决这个问题。

我正在寻找这样的脚本或者如果能找到一些软件就太好了

我已经创建了以下本地存储库本教程

*** 本地存储库是已下载软件包的离线存储,因此您无需再次下载)

笔记:我不是指清除下载的包的缓存,这可以用apt-get clean命令来完成。

答案1

我已经删除了相同软件包的旧版本。我使用了dpkg-scanpackages的多版本扫描功能的反转功能。

  1. 第一个安装dpkg-dev

    sudo apt-get install dpkg-dev
    
  2. 然后生成一个文件,其中包含软件包的名称(仅列出较新的软件包),但dpkg-scanpackages不包含-m选项。默认不包含-m选项。

    如果你在名为德布,从此文件夹的父级运行以下命令

    dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: > filenames
    

    这将创建一个名为的文件文件名其中所有 .deb 文件的名称以 格式列出Filename: deb/packagename_version.deb

    我们现在在名为的文件中拥有最新版本的所有文件的名称文件名

  3. 现在任务很简单,修改脚本将所有这些文件移动到另一个文件夹中。

    1. 首先替换Filename:mv

      sed -i 's/Filename:/mv/' filenames
      
    2. 现在在父目录中创建一个文件夹德布文件夹。我将其命名为最新(无垃圾可能是个好主意;P)。

    3. 再次改变文件名文件来移动新建的 .deb 文件最新文件夹。

      sed -i 's/\.deb/.deb newest/' filenames
      

      这将使我们的文件名文件列表,mv列出移动 .deb 文件的命令德布目录至最新目录

    4. 现在猜猜看。执行文件文件名

      sh filenames
      
    5. 最后一步是删除包含旧的过时 .deb 文件的文件夹。为了预防起见,也请检查一下最新的文件夹。

使用一行代码进行更新

安装软件包后dpkg-dev,使用单个命令生成移动脚本,通过转到.deb 文件的父文件夹使用该脚本。

 dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: | sed 's/Filename:/mv/;s/\.deb/.deb newest/' > filenames

然后创建一个名为最新并执行该文件文件名使用`sh filenames* 命令。

答案2

我遇到了同样的问题:我使用 apt-mirror 创建了一个本地存储库,此工具下载了新软件包,但保留了所有旧软件包。我做了以下操作来清理我的本地镜像:

  1. 转到镜像顶部的位置(dists 和池目录所在的目录,在我的设置中为 /var/spool/apt-mirror/mirror/ftp.nl.debian.org/debian)

  2. 创建池中所有包的列表:

    find pool -type f | sort -u > files
    
  3. 创建镜像发行版中所有软件包的列表:

    grep "^Filename:" `find dists/ -name Packages`|sed "s/^.*Filename: //"|sort -u > packages
    
  4. 现在创建两个文件之间的差异并将其转换为清理脚本:

    diff files packages | sed "/^[1-9]/d;s/^< /rm /" > cleanup.sh
    
  5. 执行生成的脚本

确保您对存储库具有写入权限(或使用 sudo 执行)。除了删除之外,您还可以将文件移动到临时位置。

这样做的目的是,您可以删除某个 Packages 文件中未提及的文件,因为它们已被新版本替换或已弃用。如果 Packages 文件中未提及文件,则连接到您的存储库的客户端将无法找到它们。

答案3

用一行代码更新删除(而不是移动)

此行代码将仅删除相同软件包的旧版本

以 root 身份运行

sudo dpkg-scanpackages /var/cache/apt/archives 2>&1 >/dev/null | grep -Po '((\/.*?deb)(?=.*?repeat;))|used that.*?\K(\/.*deb)' | xargs rm

将“/var/cache/apt/archives”替换为您的 .deb 目录

它在 Ubuntu 12.10 中运行得很好

答案4

在图纳尔:

  1. 打开/var/cache/apt/archives
  2. 根据访问时间选择文件:
    • 点击查看>>查看详细列表
    • 点击查看>>配置列>>启用访问日期
    • 单击“访问日期”表头,对文件进行排序
    • 按住 ctrl 键并单击可选择多个文件,按住 shift 键并单击可选择一系列文件
  3. 删除文件,通过右键单击>>删除(如果 Thunar 以足够的权限打开)或:
    • 右键单击>>选择重命名
    • 选择插入/覆盖,设置自定义前缀
    • 打开终端,sudo rm /var/cache/apt/archives/customprefix*.deb

相关内容