Как использовать apt-get для установки пакетов без одного указанного пакета?

Например:

Следующая команда установит все пакеты, соответствующие ее шаблону:

  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$

Спасибо ~ [ 117]

6
задан 18 September 2011 в 14:12

4 ответа

Вы можете сделать

list=$(apt-cache --names-only search ^k3b-* | awk '{ print $1 }' | \
    grep -v bad-pkg)
sudo apt-get install $list
0
ответ дан 18 September 2011 в 14:12

Скажем, вы не хотите устанавливать пакет 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 заменяет новые строки пробелами.

0
ответ дан 18 September 2011 в 14:12

Я обнаружил гораздо более простой способ сделать это:

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>

Это «-», за которым следует имя пакета для пропускать. Затем вы можете продолжить установку как обычно.

0
ответ дан 18 September 2011 в 14:12

Вы можете тривиально сделать это с помощью apt; если вы хотите установить foo, но не bar, сделайте это:

sudo apt install foo bar-

т.е. добавить дефис к bar. Со страницы руководства apt-get:

Если к имени пакета добавляется дефис (без пробела), указанный пакет будет удален, если он установлен. Точно так же знак плюс может использоваться для обозначения пакета для установки.

Это очевидно работает для пакетов, которые будут установлены, а также для тех, которые уже установлены.

0
ответ дан 18 September 2011 в 14:12

Другие вопросы по тегам:

Похожие вопросы: