apt-get 仅针对特定存储库进行更新

apt-get 仅针对特定存储库进行更新

当我添加一个 PPA 并且想要安装它的一些内容时,使用 重新更新我的所有 apt 列表是相当烦人的apt-get update

是否可以仅同步给定存储库的内容?

答案1

是的,apt-get 可以做到这一点,并且可以很好地做到这一点。

  1. 追加以下内容至~/.bash_funcs

    update-repo() {
        for source in "$@"; do
            sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/${source}" \
            -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"    
        done
    }
    
  2. 追加以下内容至~/.bashrc

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
    
  3. 追加以下内容至~/.bash_completion

    # Debian user-defined completion                             -*- shell-script -*-
    
    _ppa_lists(){
        local cur
        _init_completion || return
    
        COMPREPLY=( $( find /etc/apt/sources.list.d/ -name "*$cur*.list" \
    -exec basename {} \; 2> /dev/null ) )
        return 0
    } &&
    complete -F _ppa_lists update-repo
    
  4. 然后获取文件

    . ~/.bashrc
    . ~/.bash_completion
    
  5. 完成并开始射击

    update-repo <tab> <tab>
    

您可以使用 bash-completion 来更新单个 ppa 存储库,而无需更新整个 apt 源。

答案2

如果存储库配置在目录中的特定文件中/etc/apt/sources.list.d/,则myrepo.list可以使用以下命令更新该单个存储库:

sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/myrepo.list" \
    -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"

尽管如此,这并不方便。
这可以简化为定义一个 bash 函数

update_repo() {
    sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/$1.list" \
        -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
}

这样你就可以简单地运行

update_repo myrepo

答案3

Y PPA Manager 带有一个名为的命令行工具update-ppa,可让您更新单个 PPA。

例如:

sudo update-ppa ppa:nilarimogard/webupd8

此外,通过 Y PPA 管理器添加 PPA 时,PPA 源会自动更新(仅适用于该 PPA)。在未来版本中,还将有一个 GUI 来手动更新单个 PPA。

有关 Y PPA 经理的更多信息,这里

答案4

-u选项是在 15.10 中添加的。从 15.10 到 17.10,您可以使用-u仅自动更新您正在添加的特定 repo:

add-apt-repository -u my-ppa

愚蠢的是,直到 18.04 版才添加了此选项man(但是,它已在 中记录add-apt-repository --help)。但在 18.04 版中,此功能被删除了!(再次说明,不是在 中man,但您可以在 中看到add-apt-repository --help)。

在 18.04 版中,更新功能已改变总是apt-get update在 之后执行完整的操作。add-apt-repository-u选项实际上已被删除。它保留在那里用于旧语法,但始终设置为options.update = False。在 18.04 中,您确实可以选择-n, --no-update,这就像旧行为一样。但要么全部,要么全无,自 18.04 以来您无法更新单个存储库。

相关内容