如何使用命令行界面(而不是 GUI)将输出中的依赖包列表转换为apt-cache depends
以空格分隔的列表以供使用apt-get download
?最好,我希望这两个操作可以通过单个命令执行。
(通过“依赖包列表”,我指的是所有以字符串“ Depends:
”为前缀的包。)
用例是将一个包的所有依赖包下载到可以访问互联网的机器上,以便在没有互联网访问的机器上使用,以及如何教自己如何通过命令行重新格式化文本。
一个具有较长依赖项列表的示例涉及命令apt-cache depends gimp
,其输出如下所示。(此示例包含多次列出的几个依赖项,但apt-get download
显然忽略了重复的条目,因此无需将其过滤掉。)
gimp
Depends: libgimp2.0
Depends: libgimp2.0
Depends: gimp-data
Depends: gimp-data
Depends: libgdk-pixbuf2.0-0
Depends: xdg-utils
Depends: libaa1
Depends: libbabl-0.1-0
Depends: libbz2-1.0
Depends: libc6
Depends: libcairo2
Depends: libfontconfig1
Depends: libfreetype6
Depends: libgcc1
Depends: libgegl-0.4-0
Depends: libgexiv2-2
Depends: libglib2.0-0
Depends: libgs9
Depends: libgtk2.0-0
Depends: libgudev-1.0-0
Depends: libharfbuzz0b
Depends: libheif1
Depends: libilmbase23
Depends: libjpeg8
Depends: liblcms2-2
Depends: liblzma5
Depends: libmng2
Depends: libmypaint-1.3-0
Depends: libopenexr23
Depends: libopenjp2-7
Depends: libpango-1.0-0
Depends: libpangocairo-1.0-0
Depends: libpangoft2-1.0-0
Depends: libpng16-16
Depends: libpoppler-glib8
Depends: librsvg2-2
Depends: libstdc++6
Depends: libtiff5
Depends: libwebp6
Depends: libwebpdemux2
Depends: libwebpmux3
Depends: libwmf0.2-7
Depends: libx11-6
Depends: libxcursor1
Depends: libxext6
Depends: libxfixes3
Depends: libxmu6
Depends: libxpm4
Depends: zlib1g
Breaks: gimp-plugin-registry
Recommends: ghostscript
ghostscript:i386
|Suggests: gimp-help-en
Suggests: <gimp-help>
gimp-help-ca
gimp-help-de
gimp-help-el
gimp-help-en
gimp-help-es
gimp-help-fr
gimp-help-it
gimp-help-ja
gimp-help-ko
gimp-help-nl
gimp-help-nn
gimp-help-pt
gimp-help-ru
gimp-help-sl
gimp-help-sv
Suggests: gimp-data-extras
Suggests: gimp-python
Suggests: gvfs-backends
gvfs-backends:i386
Suggests: libasound2
liboss4-salsa-asound2
Replaces: gimp-plugin-registry
答案1
我得出的答案是apt-get download $(apt-cache depends gimp | while read line; do grep --only-matching --perl-regexp "(?<= Depends: ).+"; done | tr "\n" " ")
使用包gimp
作为示例。
解释:
apt-cache depends
作为子 shell 参数运行apt-get download
。- 在初始子 shell 输出中,使用
while
循环将输出拆分为分配给变量的行line
- 该变量可以命名为任何名称,并且不是必需的 - 使用read
命令。 - 对于每一行输出,使用
grep
带有 Perl 正则表达式的命令。启用标志--perl-regexp
,利用涉及字符串“Depends:
”的正向后视,并且仅使用标志显示匹配的文本--only-matching
。 - 最后,使用命令将所有换行符转换为空格字符
tr
。