すべてのMATEパッケージをインストールしたいと思います。
$ sudo apt-get install '^mate'
ただし、あまりにも多くのパッケージを選択し、一部のパッケージがインストールされている一部のパッケージと競合します。
今私はそれらを除外したいと思います。どんなアイデアがありますか?
当然、これはうまくいきません。
$ sudo apt-get install '^mate && !-dev'
あるいは、単にapt-getがクラッシュするパッケージを無視するようにすることはできますか?
答え1
正規表現だけで引数として渡すことができますapt-get install
。
必要な操作を実行する正規表現を作成できますが、退屈です。正規表現の否定は正規表現を使用して表現できますが、2の補数正規表現のサイズは通常、元の正規表現のサイズに応じて指数関数的に大きくなります。
apt-get install '^mate(.?.?.?|.*([^v]|[^e]v|[^d]ev|[^-]dev))$'
Aptitudeの検索モードを使用して、ある程度適切な構文でパッケージリストを作成し、結果リストをまたはにapt-get install
渡すことができますaptitude install
。
aptitude search '^mate !-dev$'
答え2
次のように試すことができます。
list="" ; for pkg in $(apt-cache search ^mate | grep -v -- '-dev'); list="$list $pkg" ; done ; sudo apt-get install $list
答え3
私は直接このような質問をしたことがあります。否定的な予測を試しましたが、apt-getはこれを理解していません。それで、同じ結果を保持する別の方法を見つけて、ここで答えを見つけました。それにもかかわらず、選択したソリューションはgrepを使用しているため、プレビューを使用して呼び出し側で検索表現をはるかに短縮できます。
apt-cache search '^mate' | grep -P '^mate(?!.*dbg)(?!.*dev).*'
Matesパッケージ(atrilなど)には、mateで始まる名前はありません。彼らはそれをまったく含んでいません。