2つのストレージ間の重複を表示する方法

2つのストレージ間の重複を表示する方法

ローカルに2つのリポジトリがあります。 1 つは Squeeze のコピー、もう 1 つは Reprepro によって管理されるカスタムコピーです。 2つの間に冗長パッケージリストを生成する既製のツールはありますか?

答え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")

関連情報