例如:
以下命令将安装所有符合其模式的包:
sudo apt-get install k3b-*
如果我想使用该指令但不想安装具有破坏依赖关系的特定包,我该怎么做?
我已尝试过,但没有效果。
sudo apt-get install "$(apt-cache --no-generate pkgnames k3b | grep -v extrathemes | tr '\n' ' ')":
sam@/home/sam/code/ros/ai/cram/roslisp_repl$ sudo apt-get install "$(apt-cache --no-generate pkgnames k3b | grep -v extrathemes | tr '\n' ' ')"
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package k3b-dbg k3b-data k3b
sam@/home/sam/code/ros/ai/cram/roslisp_repl$
谢谢〜
答案1
你可以做
list=$(apt-cache --names-only search ^k3b-* | awk '{ print $1 }' | \
grep -v bad-pkg)
sudo apt-get install $list
答案2
假设您不想安装 k3b-extrathemes 包。除了列出除以下包之外的所有包,可能没有其他可行的方法可以做到这一点:sudo apt-get install k3b-data k3b-dbg
。
然而,你可以在一些帮助下做到这一点:
sudo apt-get install $(apt-cache --no-generate pkgnames k3b \
| grep -v extrathemes | tr '\n' ' ')
这不是很详细。apt-cache ...
返回包的名称,grep -v PACKAGENAME
排除包,并且tr
命令用空格替换新行。
答案3
我发现了一种更简单的方法:
sudo aptitude install <package>
这将使用aptitude
代替apt-get
- 为您提供了更多选项。当您看到以下内容时:
The following NEW packages will be installed:
...
0 packages upgraded, 12 newly installed, 0 to remove and 0 not upgraded.
Need to get 130 MB/130 MB of archives. After unpacking 216 MB will be used.
Do you want to continue? [Y/n/?]
不要按‘y’,而是输入以下内容:
-<package_to_skip>
这是一个“-”,后面跟着要跳过的包的名称。然后您就可以正常继续安装了。
答案4
您可以使用 apt 轻松地完成此操作;如果您想安装foo
但不想bar
,请执行以下操作:
sudo apt install foo bar-
即在 后面附加一个连字符bar
。摘自 apt-get 手册页:
如果在软件包名称后附加连字符(中间没有空格),则已安装的已识别软件包将被删除。同样,可以使用加号来指定要安装的软件包。
这显然适用于将要安装的软件包以及已经安装的软件包。