「dpkg --get-selections」をフィルタリングして、リポジトリで利用可能なパッケージのみにするにはどうすればよいですか?


9

あるシステムにインストールされているパッケージのリストを取得して、それらのすべてを別のシステムにインストールしたいと思います。

ターゲットシステムでdpkg --get-selectionsパイプ処理できるすべてのインストール済みパッケージのリストが表示されることを知っていますdpkg --set-selections。ただし、インストールされたパッケージの一部は、ローカルで(checkinstallなどを使用して)自分でビルドしたものであり、リポジトリから入手できません。dpkg --set-selectionsリポジトリにこれらのパッケージを見つけることができないとき、プロセスは失敗します。

ではdpkg --get-selections現在インストールされているバージョンが現在のリポジトリで利用可能なパッケージのみが含まれるように、によって生成されたリストをフィルタリングする方法はありますか?

回答:


9

最近のソフトウェアセンターには、コンピューター間で同期する機能があると思います。それが不足しているパッケージを正しく処理する場合、それはあなたの問題を解決することができます。

ここでの問題は、dpkgインストールされているパッケージのみがリポジトリを認識しないことです。を実行すると、パッケージがリポジトリで使用可能かどうかを確認できますapt-cache policy $package。にリポジトリが表示されている場合はVersion Table、そこで利用できます。

これはどうですか?それは遅いですが、うまくいくはずです:

dpkg --get-selections '*' \
  | while read line; do
    apt-cache policy $(echo "$line" | cut -f1 ) \
      | grep -q 'http://' \
      && echo "$line"
done

これは、ファイルへの進捗状況や書き込みが表示されます:total=$(dpkg --get-selections '*'|wc -l); i=0; dpkg --get-selections '*' | while read line; do i=$(($i+1)); apt-cache policy $(echo "$line" | cut -f1 ) | grep -q 'http://' && echo "$i/$total $line"; echo $line>>/var/tmp/dpkg-selection.list; done
rubo77

-4

次のコマンドを使用します

dpkg --get-selections > installed-software

それはあなたのホームディレクトリにinstalled-softwareと呼ばれるファイルを作成します

新しいシステム

dpkg --set-selections < installed-software

これは選択を読み取り、インストールします


3
あなたはその質問を読んだとは思わない。
ライアンC.トンプソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.