特定のパターンに一致するすべてのパッケージを削除するにはどうすればよいですか?

特定のパターンに一致するすべてのパッケージを削除するにはどうすればよいですか?

libreoffice をアンインストールしたいです。このプログラムは、約 3 ダースのモジュールで構成されています。理想的には、次の方法で削除できます。

aptitude remove libreoffice3.6* libreoffice-debian-menus libobasis3.6-*

しかし、それは失敗する

Couldn't find any package whose name or description matched "libreoffice3.6*"

パターン別にパッケージのセットを削除するにはどうすればよいですか?

dpkg追伸:またはaptを使った回答も嬉しいです

答え1

  1. apt-getまたはapt(ではなく)を使用しaptitude、アンカー正規表現を使用します。

  2. 正規表現では、 は.任意の文字を意味し、 は*0 回以上の繰り返しを意味します。したがって、この表現は、文字列 に任意の数の文字が続くlibreoffice.*任意のパッケージ名と一致します。正規表現は、 (文字列の先頭に一致させる場合) または(文字列の末尾に一致させる場合)、あるいはその両方で固定する必要があります。そうしないと、正規表現は APT によって認識されません。libreoffice^$

  3. シェルがアスタリスクを解釈しないようにするには、正規表現を一重引用符で囲みます。

例:

名前が で始まるすべてのパッケージを削除するにはlibreoffice、次のコマンドを実行します。

sudo apt remove '^libreoffice.*$'

答え2

代替案は次のとおりです。

dpkg -l | grep libreoffice | awk '{print $2}' | xargs -n1 echo

これにより、一致するすべてのパッケージがリストされますlibreoffice。削除したいパッケージがすべて揃っていることを確認したら、次のコマンドを実行します...慎重に:

dpkg -l | grep libreoffice | awk '{print $2}' | xargs -n1 sudo apt-get purge -y

アイデア:

  1. システムにインストールされているすべてのパッケージをリストさせる
  2. 一致するものだけを表示するフィルターlibreoffice
  3. パッケージ名の列のみを表示するようにフィルターします
  4. 各パッケージに対してpurgeコマンドを実行します

答え3

Aptitude はグローバル パターンをサポートしており、次のような非常に優れた一致もサポートしています。

aptitude remove '?and(?name(libreoffice), name(3.6), ~i)' libreoffice-debian-menus

これは、名前にlibreofficeと が含まれ3.6、インストールされている ( の意味) パッケージと一致します~i

答え4

同じプレフィックスを持つ多数のファイルを削除する必要がある場合、中括弧の展開が非常に便利だと思います。

sudo apt remove libreoffice-l10n-{bg,ca,cs,da,de,en-za,es,fr,hu,id,ja,ko,nb,nl,pl,pt,ru,sv,th,tr,uk,vi,zh-cn,zh-tw}

このコマンドを使用して、使用しない言語パックをすべて削除しました。はい、正規表現を使用すると、保持する言語パックを指定し、その他を削除できます。とにかく、これは覚えやすく、多くの bash コマンドでも機能するため気に入っています。

関連情報