我正在使用Arch Linux。
有没有办法列出所有已安装软件包的可选依赖项?如果是,我是否可以过滤此列表以仅查看缺少(未安装)的软件包?
pacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
我正在使用Arch Linux。
有没有办法列出所有已安装软件包的可选依赖项?如果是,我是否可以过滤此列表以仅查看缺少(未安装)的软件包?
pacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
Answers:
您可以使用expac查询pacman
数据库。
就像是:
awk 'NF>=2' <(expac "%n %O") > optdeps
它将打印您的计算机上所有已安装软件包的列表,并将optdepends
每个(%O
)1打印到一个名为optdeps
。然后,您可以根据已安装的optdepends软件包列表对此进行排序。
请参阅man expac
以获取选项的完整列表。
1.这是一个大写字母O,而不是零。因为我们无法区分两者之间的字体 ...
AUR资料库(aur / pacdep)中有一个不错的实用程序。
pacdep有很多选项-仅是一个示例-查找“ thunar-archive-plugin”的可选软件包:
> pacdep -oppp thunar-archive-plugin
[...]
Optional dependencies: 6.16 MiB
extra/file-roller 3.89 MiB
extra/kdeutils-ark 1.12 MiB
community/xarchiver 1.16 MiB
[...]
上面的输出表示未安装任何可选软件包。安装“ xarchiver”后,输出看起来像
[...]
Optional dependencies: 6.16 MiB
local: 1.16 MiB
xarchiver 1.16 MiB
sync: 5.01 MiB
extra/file-roller 3.89 MiB
extra/kdeutils-ark 1.12 MiB
[...]
我在http://mywaytoarch.tumblr.com/post/34979742718/easily-list-package-dependencies中找到了(答案的第一部分)
这不是完全有效,但是会找到您想要的(颜色!):
pacman -Q > /tmp/paccache
for pkg in $(awk '{print $1}' /tmp/paccache) ; do
echo -n "$pkg => ";
for dep in $(pacman -Qi $pkg | awk -F: '/Optional Deps/{gsub(/[\<\>=].*/,"");print $NF;}' ) ; do
grep -q "$dep" /tmp/paccache && COLOR=32 ; echo -en "\e[1;${COLOR:-31}m${dep}\e[0;m " ; unset COLOR ;
done
echo
done
||
在&&
之后加上grep
括号,然后在行的其余部分加上括号吗?
pacman -Qi xmms2 | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1 | cut -c19- | cut -d: -f1
尽管我不得不注意到@DarkHeart的解决方案并没有真正起作用,但它启发了我开发出一种可行的解决方案。(不过没有颜色)
我正在使用 package-query,而不是@jasonwryan建议的expac的类似工具,因为我已经安装了它(这是yaourt的依赖项)。改为使用expac来更改它应该是微不足道的。
所有可选依赖项的列出大部分是通过调用package-query完成的。第一个for循环删除了说明,因此仅保留了可选依赖项的程序包名称。第二个for循环在第二个结果中打印结果之前,在其第一行中删除已经安装的依赖项。
#!/usr/bin/perl
use strict;
use warnings;
my %deps;
for (`package-query -Q -f'%n %O'`) {
$deps{ (/^(\S+)/)[0] } = [/(\S+):/g];
}
my @pkgs = keys %deps;
for my $pkg (@pkgs) {
my @missing_deps = grep { !($_ ~~ @pkgs) } @{ $deps{$pkg} };
print "$pkg => @missing_deps\n" if @missing_deps;
}
有时您必须倒退...首先找到所有非可选的依赖项,然后与完整列表进行交叉引用,然后使用uniq。这将生成已安装的可选依赖的列表。
查找所有已安装
pacman -Q
查找所有非可选的:
pacman -Qent
因此,唯一项必须是可选的:
(pacman -Q; pacman -Qent) | sort | uniq -u
生成缺少的可选列表取决于描述,虽然不是很漂亮,但是可以使用。
pacman -Q > /tmp/paccache; for pkg in $(awk '{print $1}' /tmp/paccache); do pacman -Qi $pkg | grep "^Optional Deps" | grep -v None >/dev/null && echo $pkg >> /tmp/hasdeps; done
for pkg in $(awk '{print $1}' /tmp/hasdeps); do echo -ne "Package: $pkg ___ "; (pacman -Qi $pkg | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1) | grep -v installed; echo ___; done | grep -v "___ ___" | sed -e 's/Optional Deps/ /' -e 's/___//' | sed -e 's/ \+/ /g'