我想安装所有 MATE 软件包,
$ sudo apt-get install '^mate'
但是,它选择了太多软件包,并且某些软件包与某些已安装的软件包发生冲突。
现在,我想排除他们。任何想法?
毫不奇怪,这行不通:
$ sudo apt-get install '^mate && !-dev'
或者,我可以简单地让 apt-get 忽略那些冲突的包吗?
答案1
您只能将正则表达式作为参数传递给apt-get install
.
您可以创建一个正则表达式来完成您想要的操作,但这很乏味。正则表达式的否定可以用正则表达式来表达,但补码正则表达式的大小一般会随着原正则表达式的大小呈指数增长。
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 开头。他们甚至根本不包含它。