如何显示两个存储库之间的重复项

如何显示两个存储库之间的重复项

我在本地有 2 个存储库。一个是 Squeeze 的副本,另一个是自定义副本,由 reprepro 管理。是否有现成的工具可以生成两者之间的重复包列表?

答案1

你可以一起去复制品它使用 md5sum 来比较文件并允许删除重复项。不过,我对 Debian 存储库了解不够,因此您可能还必须从某些软件包注册表中删除这些文件(我认为每个存储库中都有一个名为packages.gz 或类似的文件)。

那么你应该做什么:

  1. 使用 fdupes 生成重复项列表
  2. 使用该列表从存储库信息中删除包
  3. 删除实际文件

答案2

愚蠢的我,我一直在编写一个脚本,使这变得更快更容易:

#!/usr/bin/python3

import os
import gzip
import apt_pkg

repo1 = "~/.repo_local/dists/cache/main/binary-i386/Packages.gz"
repo1 = os.path.expanduser(repo1)
repo1 = apt_pkg.TagFile(gzip.open(repo1, "rb"))
repo1 = dict([(pkg["Package"], pkg["Version"]) for pkg in repo1])

repo2 = "~/.repo_bin/dists/squeeze/main/binary-i386/Packages.gz"
repo2 = os.path.expanduser(repo2)
repo2 = apt_pkg.TagFile(gzip.open(repo2, "rb"))
repo2 = dict([(pkg["Package"], pkg["Version"]) for pkg in repo2])

apt_pkg.init_system()
found = False

for pkg in repo1:
    if pkg in repo2:
        vc = apt_pkg.version_compare(repo1[pkg], repo2[pkg])
        if vc == 0:
            print("{:<30}{:<30}({})".format(repo1[pkg], repo2[pkg], pkg))
            found = True

if found:
    print("=" * 90)
    print("{:<30}{:<30}({})".format("custom", "official", "package name"))
else:
    print("nothing matching search criteria found")

相关内容