思路就是利用apt-get
的depend
选项,这会列出所给包的依赖,但是只是直接依赖,间接依赖需要递归。
可以手动递归,也可以用--recurse
选项来递归。
下面采用--recurse
递归,并用awk
来过滤出需要的包名 。
同时,通过--no-*
系列选项关闭了所有不必要的。
最后,用apt-get download XXX
或者apt download XXX
来依次下载每个包。
脚本
#!/bin/bash
#$1 pkg
get_all_depends()
{
apt-cache depends --no-pre-depends --no-suggests --no-recommends \
--no-conflicts --no-breaks --no-enhances\
--no-replaces --recurse $1 | awk '{print $2}'| tr -d '<>' | sort --unique
}
## 遍历命令行参数,参数应为包名。
for pkg in $*
do
all_depends=$(get_all_depends $pkg)
echo -e "所有依赖共计"$(echo $all_depends | wc -w)"个"
echo $all_depends
i=0
for depend in $all_depends
do
i=$((i+1))
echo -e "\033[1;32m正在下载第$i个依赖:"$depend "\033[0m"
apt-get download $depend
done
done
效果
漏洞
对于一些包,比如wine,依赖中有一些在下载时会提示无候选版本可下载(似乎是架构相关),暂时不知道什么意思,以后弄懂了再改它。